在javascript中从对象创建数组的问题?

时间:2017-02-06 22:22:25

标签: 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(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

3 个答案:

答案 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; }); 属性按升序排序的对象数组。只需切换valuea即可获得降序排序。

希望这有帮助!

答案 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步骤按第二个值对其进行排序