在 JavaScript 中对对象数组进行排序
Sort array of objects in JavaScript
我通过 json_encode
从 PHP 获得了一个 objetcs 数组。问题是在PHP端项目是有序的,但是当它到达JS端时,项目不是有序的。
myArray[96] = array ( "product" => "Drone",
"quant" => "23",
"available" => "true");
myArray[43] = array ( "product" => "Aereo",
"quant" => "2",
"available" => "false");
myArray[55] = array ( "product" => "Geos",
"quant" => "45",
"available" => "true");
myArray[13] = array ( "product" => "Barsad",
"quant" => "3",
"available" => "true");
那么,如何在 JavaScript 端按"产品"对该数组进行排序呢?
问题是PHP所谓的"数组"可以是,但也不能是JavaScript中的数组。您正在获取一个对象(或关联数组,或字典或哈希表):
{"96":{"product":"Drone","quant":"23","available":"true"},
"43":{"product":"Aereo","quant":"2","available":"false"},
"55":{"product":"Geos","quant":"45","available":"true"}...}
这在 JavaScript 中是不可排序的。你有三个选择:转换为真正的数组(如果你不关心键,或者如果你可以将键插入到对象中),使用索引数组(并对其进行排序),或者(在 ES6 中)使用 Map
及其约定,它应按插入顺序保留项目的顺序(但它仅适用于新的 JavaScript 环境)。
例如,一种方法是这样的(使用索引数组):
var data = {"96":{"product":"Drone","quant":"23","available":"true"},
"43":{"product":"Aereo","quant":"2","available":"false"},
"55":{"product":"Geos","quant":"45","available":"true"}};
var keys = Object.keys(data);
keys.sort(function(a, b) {
var pa = data[a].product;
var pb = data[b].product;
if (pa === pb) return 0;
return (pa < pb) ? -1 : 1;
});
keys.forEach(function(key) {
console.log(key, data[key]);
});
<!-- results pane console output; see http://meta.stackexchange.com/a/242491 -->
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 在数组的 2/3 上调用自身的排序算法
- 数组值的排序以匹配另一个数组ES6
- 按不同项目对对象数组进行排序
- 根据Javascript中的字符串值对数组的数组进行排序
- 在不同的javascript数组中对json响应进行排序
- 对对象数组中的数组进行排序
- 按特定键对对象数组进行排序
- 使用jquery根据数组对表行进行排序
- 尝试对对象数组进行排序但拼接不是一个函数
- 对javascript中某些键的对象数组进行排序
- Javascript按数字顺序排序()数组
- Javascript排序索引链接数组
- 在jquery中对时间数组进行排序
- 如何在具有相同 ID 的 Javascript 中按排序函数对关联数组进行排序
- Javascript中的多维数组排序索引问题
- 如何在mongodb中根据数组内容的差异进行排序
- 在Javascript中对具有特定异常的对象数组进行排序
- 数组数据排序类似mysql查询
- 在小于O(n)时间内找到(排序)数组中的重复元素