资讯专栏INFORMATION COLUMN

javascript实现PHP字典排序ksort

happyhuangjinjin / 1748人阅读

摘要:实现字典排序当前规定要进行排序的数组规定如何排列数组的元素项目上面写好字典排序方法,然后进行调用腾讯开放平台示例仅供参考最后,字典排序后的顺序为

/**
 * javascript实现PHP字典排序
 * @param {Object} vm 当前this
 * @param {Array} inputArr 规定要进行排序的数组
 * @param {String} sort_flags 规定如何排列数组的元素/项目
 */
export function ksort(vm, inputArr, sort_flags) {
  //  discuss at: http://phpjs.org/functions/ksort/
  // original by: GeekFG (http://geekfg.blogspot.com)
  // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // improved by: Brett Zamir (http://brett-zamir.me)
  //        note: The examples are correct, this is a new way
  //        note: This function deviates from PHP in returning a copy of the array instead
  //        note: of acting by reference and returning true; this was necessary because
  //        note: IE does not allow deleting and re-adding of properties without caching
  //        note: of property position; you can set the ini of "phpjs.strictForIn" to true to
  //        note: get the PHP behavior, but use this only if you are in an environment
  //        note: such as Firefox extensions where for-in iteration order is fixed and true
  //        note: property deletion is supported. Note that we intend to implement the PHP
  //        note: behavior by default if IE ever does allow it; only gives shallow copy since
  //        note: is by reference in PHP anyways
  //        note: Since JS objects" keys are always strings, and (the
  //        note: default) SORT_REGULAR flag distinguishes by key type,
  //        note: if the content is a numeric string, we treat the
  //        note: "original type" as numeric.
  //  depends on: i18n_loc_get_default
  //  depends on: strnatcmp
  //   example 1: data = {d: "lemon", a: "orange", b: "banana", c: "apple"};
  //   example 1: data = ksort(data);
  //   example 1: $result = data
  //   returns 1: {a: "orange", b: "banana", c: "apple", d: "lemon"}
  //   example 2: ini_set("phpjs.strictForIn", true);
  //   example 2: data = {2: "van", 3: "Zonneveld", 1: "Kevin"};
  //   example 2: ksort(data);
  //   example 2: $result = data
  //   returns 2: {1: "Kevin", 2: "van", 3: "Zonneveld"}

  var tmp_arr = {},
    keys = [],
    sorter, i, k, that = vm,
    strictForIn = false,
    populateArr = {};

  switch (sort_flags) {
    case "SORT_STRING":
      // compare items as strings
      sorter = function (a, b) {
        return that.strnatcmp(a, b);
      };
      break;
    case "SORT_LOCALE_STRING":
      // compare items as strings, original by the current locale (set with  i18n_loc_set_default() as of PHP6)
      var loc = vm.i18n_loc_get_default();
      sorter = vm.php_js.i18nLocales[loc].sorting;
      break;
    case "SORT_NUMERIC":
      // compare items numerically
      sorter = function (a, b) {
        return ((a + 0) - (b + 0));
      };
      break;
    // case "SORT_REGULAR": // compare items normally (don"t change types)
    default:
      sorter = function (a, b) {
        var aFloat = parseFloat(a),
          bFloat = parseFloat(b),
          aNumeric = aFloat + "" === a,
          bNumeric = bFloat + "" === b;
        if (aNumeric && bNumeric) {
          return aFloat > bFloat ? 1 : aFloat < bFloat ? -1 : 0;
        } else if (aNumeric && !bNumeric) {
          return 1;
        } else if (!aNumeric && bNumeric) {
          return -1;
        }
        return a > b ? 1 : a < b ? -1 : 0;
      };
      break;
  }

  // Make a list of key names
  for (k in inputArr) {
    if (inputArr.hasOwnProperty(k)) {
      keys.push(k);
    }
  }
  keys.sort(sorter);

  // BEGIN REDUNDANT
  vm.php_js = vm.php_js || {};
  vm.php_js.ini = vm.php_js.ini || {};
  // END REDUNDANT
  strictForIn = vm.php_js.ini["phpjs.strictForIn"] && vm.php_js.ini["phpjs.strictForIn"].local_value && vm.php_js
    .ini["phpjs.strictForIn"].local_value !== "off";
  populateArr = strictForIn ? inputArr : populateArr;

  // Rebuild array with sorted key names
  for (i = 0; i < keys.length; i++) {
    k = keys[i];
    tmp_arr[k] = inputArr[k];
    if (strictForIn) {
      delete inputArr[k];
    }
  }
  for (i in tmp_arr) {
    if (tmp_arr.hasOwnProperty(i)) {
      populateArr[i] = tmp_arr[i];
    }
  }

  return strictForIn || populateArr;
}
上面写好字典排序方法ksort,然后进行调用
let aa = ksort(
  this,
  {
    "app_id": "10000",
    "time_stamp":"1493449657",
    "nonce_str":"20e3408a79",
    "key1":"腾讯AI开放平台",
    "key2":"示例仅供参考",
    "sign":""
  }
)
最后,字典排序后的顺序为:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31300.html

相关文章

  • javascript实现PHP字典排序ksort

    摘要:实现字典排序当前规定要进行排序的数组规定如何排列数组的元素项目上面写好字典排序方法,然后进行调用腾讯开放平台示例仅供参考最后,字典排序后的顺序为 /** * javascript实现PHP字典排序 * @param {Object} vm 当前this * @param {Array} inputArr 规定要进行排序的数组 * @param {String} sort_fla...

    gekylin 评论0 收藏0
  • javascript实现腾讯AI开放平台,调用API时的接口鉴权,生成sign合法签名

    摘要:整个流程图在网上查了很多,但看到有人用前端做腾讯开放平台,生成签名的,所以闲着就自己弄了一下。这样就可以请求腾讯开放平台上的。注意如果使用身份证接口,字段是的的时候,格式问题不需要前面。 整个流程图 showImg(https://segmentfault.com/img/bVbrHpe?w=745&h=924); 在网上查了很多,但看到有人用javascript前端做腾讯AI开放平台...

    crelaber 评论0 收藏0
  • PHP标准库SPL学习之数据结构、常用迭代器、基础接口

    摘要:将数组或者集合中的全部或者一部数据取出来,用迭代器比较方便迭代器能陆续遍历几个迭代器按顺序迭代访问几个不同的迭代器。 一、SPL简介      什么是SPL PHP的标准库SPL:Standard PHP Library      SPL: 用于解决常见普遍问题的一组接口与类的集合      Common Problem: 数学建模/数据结构 解决数据怎么存储的问题 元素遍历 ...

    2i18ns 评论0 收藏0
  • 支付开发填坑记之支付宝

    摘要:原文地址支付支付步骤为获取支付宝的配置信息。将得到的数据请求支付宝客户端进行支付。端将拼接好的字符串拿去请求支付宝客户端即可调起支付宝进行支付。向支付宝申请新订单,获取支付。成功请求回来后,就可以向支付宝发出一次支付请求。 支付宝在所有支付方式中最好开发的了,因为文档比较清晰,而且开发起来也比较简单。因此,支付宝的坑是相对较少的。原文地址 APP支付 APP支付步骤为: 获取支付宝的...

    chanjarster 评论0 收藏0
  • 10个必须掌握的PHP关联数组使用技巧

    摘要:额外的数组元素可以象下面这样追加如果你正在处理数字索引数组,你可能想使用显示命名的函数前置和追加元素,如和函数,但这些函数不能操作关联数组。 在使用 PHP 进行开发的过程中,或早或晚,您会需要创建许多相似的变量,这时候你可以把数据作为元素存储在数组中。数组中的元素都有自己的 ID,因此可以方便地访问它们。 关联数组 关联数组,它的每个 ID 键都关联一个值。在存储有关具体命名的值的数...

    bawn 评论0 收藏0

发表评论

0条评论

happyhuangjinjin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<