将单属性JavaScript对象的数组转换为键/值对的数组

时间:2014-09-05 19:50:27

标签: javascript

我有一组看起来像

的JavaScript词典
my_dictionary = [
    {"first_thing": "1"},
    {"second_thing": "2"}
]

,但需要看起来像

my_dictionary = [
    {key: "first_thing", value: "1"},
    {key: "second_thing", value: "2"}
]

。由于这些词典中有这么多,我需要一种方法来迭代它们并更改所有词典,以便它们将keyvalue置于其中。

我尝试过迭代,并尝试使用my_dictionary[0].key以及my_dictionary[0][0]之类的东西来选择它们,我希望它能起作用,但我想这不是这样做的方法。< / p>

4 个答案:

答案 0 :(得分:2)

由于所有转换都发生在元素中,我喜欢使用[] .map():

[{"first_thing": "1"}, {"second_thing":"2"}].map(function(o){
  var o2={};
  Object.keys(o).forEach(function(k){o2.key=k; o2.value=o[k];});
  return o2;
});

// == [{"key":"first_thing","value":"1"},{"key":"second_thing","value":"2"}]

答案 1 :(得分:0)

只需遍历字典并修改每个元素:

for (var index = 0; index < my_dictionary.length; index++) {
    var element = my_dictionary[index],
        key, value;

    // Grab the initial element
    for (var tempKey in element) {
        if (element.hasOwnProperty(tempKey)) {
            key = tempKey;
            value = element[tempKey];
            break;
        }
    }

    // Reset the element
    element = { "key": key, "value": value };
}

它不是最优雅的解决方案,但它确实有效。

答案 2 :(得分:0)

这是使用jQuery.each()

的简单解决方案
 var result = [];
 var my_dictionary = [{"first_thing": "1"}, {"second_thing":"2"}];
 $.each(my_dictionary, function(index, element) {
     $.each(element, function(key, value) {
         result.push({"key" : key, "value" : value});
     });
 });

在这里小提琴:http://jsfiddle.net/36o170w9/

答案 3 :(得分:-1)

您可以使用for..in

无副作用

var dict_in = [{"first_thing": "1"}, {"second_thing": "2"}];

var dict_out = (function (arr) {
    var d = [], i, k;
    d.length = arr.length;
    for (i = 0; i < arr.length; ++i)
        for (k in arr[i]) {
            d[i] = {'key': k, 'value': arr[i][k]};
            break;
        }
    return d;
}(dict_in));

dict_out; // [{key: "first_thing", value: "1"}, {key: "second_thing", value: "2"}]

副作用

var dict_in = [{"first_thing": "1"}, {"second_thing": "2"}];

(function (arr) {
    var i, k, v;
    for (i = 0; i < arr.length; ++i)
        for (k in arr[i]) {
            v = arr[i][k];
            delete arr[i][k];
            arr[i].key = k;
            arr[i].value = v;
            break;
        }
    return arr;
}(dict_in)); // [{key: "first_thing", value: "1"}, {key: "second_thing", value: "2"}]