从javascript中的对象创建数组时出现问题?
我有一个对象需要转换成数组。以下是我已经掌握的代码:从javascript中的对象创建数组时出现问题?,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我有一个对象需要转换成数组。以下是我已经掌握的代码: 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(categ
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
关联数组在javascript中不是一种东西。您可以使用带有基于0的数字索引的
[]
表示的数组,也可以使用可以存储键值对的{}
表示的对象。后一种构造可以用作关联数组的替换(即向其中添加任意键和值),但它们不能像数组一样处理
在这种情况下,您想要的是您已经拥有的东西—一个键/值存储,但它被称为对象
编辑
如果您只想对数据进行排序,而不考虑数据类型
您可以使用单个键值对将对象拆分为多个对象,然后从这些对象创建一个数组,并使用array.sort()
对它们进行任意排序。下面是一个将提供的数据拆分为对象的快速示例:
var originalData = {
"ABC" : 8,
"DEF" : 7,
"GHI" : 5,
},
sortableArray = [];
for (key in originalData) {
sortableArray.push({
"key" : key,
"value" : originalData[key]
});
}
这将创建一个新对象并将其附加到可排序的[]
数组中。要根据其原始值对其进行排序,需要提供一个比较器函数,该函数访问对象的值
属性
sortableArray.sort(function(a,b) {
return a.value - b.value;
});
这将返回按每个对象的值
属性升序排列的对象数组。只需切换a
和b
即可获得降序排序
希望这有帮助 对数据进行排序的最佳方法是将对象映射到数组中,如下所示:
[
{
"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
});
然后使用以下代码对其进行排序:
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
)。在ES6中,Object.entries(a).sort((a,b)=>a[1]
这会给你类似的东西
[
[“ABC”,8]
[“DEF”,7]
[“GHI”,5]
]
.entries
步骤为您提供配对列表,而.sort
步骤按第二个值对它们进行排序请添加数据。返回[value]代码>和$.map创建数组。。。数组的索引为0。你想要的是一些由键索引的东西,因此,显然数组不是你想要的。为什么你要一次又一次地循环将相同的值赋给objToArray
?这没道理。@KevinB,你能告诉我一个可以用键索引的东西的方向吗?基本上,我首先将这些数据放入一个数组,因为我需要对值进行排序。对象键不能按其值排序,因此,您的原始数据结构(对象数组)可能就是您需要使用的结构。谢谢。我感谢你的时间和解释,这对我来说很有意义。是否有一种方法可以将对象中的数据从最高点排序到最低点,或者我无法手动排序数据?(很抱歉,如果这是一个太大的问题,无法在此处回答)您无法对对象中的键进行真正的排序,因为它们在定义上是无序的,但是如果您将值本身转化为一个对象,并将键移动到其中,则可以使用Array.sort()对其进行排序。我会用更好的答案更新我的答案explanation@JessicaL. 更新。