我有一个对象需要转换为数组。这是我已有的代码:
for (var key in categoryData[p]) { // categorydata is an object, the "p" is because this is taking place in a loop (array of objects)
if (categoryData[p].hasOwnProperty(key)) {
var objToArray = $.map(categoryData[p], function(value, key) {
return [value];
});
}
}
现在,这是回归:
0 : value
1 : value
2 : value
我希望它返回:
Key : Value
Key : Value
Key : Value
但我还没有找到一种方法来处理我的数据。任何方向都将非常感谢!
编辑:添加更多信息:
我想从最高到最低值排序。为了澄清,我希望数据看起来像这样:
(key) (object)
"ABC" : 8
"DEF" : 7
"GHI" : 5
我将它放入一个数组中,因为当它们在一个对象中时我无法对这些值进行排序(据我所知)。
我的数据相当复杂,在CSV文件中,但它的想法是:
ABC, DEF, GHI
8 , 7 , 5
答案 0 :(得分:2)
关联数组在javascript中不是什么东西。您可以使用FilterValue1
表示基于0的数字索引的数组,也可以使用[]
表示的可以存储键值对的对象。后一种构造可以用作关联数组的替代(即向其添加任意键和值),但它们不能像数组一样对待。
在这种情况下,您想要的是一个键/值存储,除了它被称为对象。
修改的
您可以使用单个键值对将对象拆分为多个对象,然后从这些对象创建一个数组,并使用{}
以任意方式对其进行排序。以下是将提供的数据拆分为对象的快速示例:
Array.sort()
这会创建一个新对象并将其附加到我们的可排序var originalData = {
"ABC" : 8,
"DEF" : 7,
"GHI" : 5,
},
sortableArray = [];
for (key in originalData) {
sortableArray.push({
"key" : key,
"value" : originalData[key]
});
}
数组中。要根据其原始值对其进行排序,您需要提供一个比较器函数来访问对象的[]
属性。
value
这应该返回按每个对象的sortableArray.sort(function(a,b) {
return a.value - b.value;
});
属性按升序排序的对象数组。只需切换value
和a
即可获得降序排序。
希望这有帮助!
答案 1 :(得分:1)
对数据进行排序的最佳方法是将对象映射到数组中,如下所示:
[
{
"key": someKey
"value": someValue
},
{
"key": someOtherKey
"value": someOtherValue
},
//...
]
使用此代码:
var objToArray = $.map(categoryData[p], function(value, key) {
return {"key": key, "value": value};
});
然后使用此代码对其进行排序:
objToArray.sort(function(a, b) {
// if the values are numbers (otherwise you have to change this to addapt to your dataType)
return b.value - a.value; // to sort from highest to lowest or a.value - b.value to sort from lowest to highest
});
然后您就可以使用它:
objToArray[0].key; // to get the key of the first item
objToArray[3].value; // to get the value of the 4-th item
// ...
您也可以循环浏览它们(for(var i = 0; i < objToArray.length; i++)...
)。
答案 2 :(得分:0)
在ES6中,Object.entries(a).sort((a, b) => a[1] < b[1] )
这会给你这样的东西
[
["ABC", 8]
["DEF", 7]
["GHI", 5]
]
.entries
步骤为您提供配对列表,.sort
步骤按第二个值对其进行排序