从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. 更新。