如何将数组值推送到不同的数组?

时间:2012-06-06 10:47:23

标签: javascript jquery arrays

我有一个包含键和值的数组,我希望将这些元素推入2个不同的数组(键入一个,值为另一个)

这是我用过的代码:

// the array i want to split
var defaultc = {
    'a':'r019',
    'b':'r027',
    'c':'r027',
    'd':'r027',
    'e':'r047'
};
// the array i want to add to
var step_layer = []; // keys to this
var step_colour = {}; // values to this


$('#reset').click(function() {
    $.each(defaultc, function(layer, colour) {

        // both these functions are working properly
        apply_changes(layer, colour);
        sumary(layer, colour);
    });

    // this part is not
    for (var layer in defaultc) {
        if (!defaultc.hasOwnProperty(layer)) {
        step_layer.push(layer);
        step_colour[layer].push(colour);
    }}
    return false;
});

2 个答案:

答案 0 :(得分:2)

var defaultc = {
    'a':'r019',
    'b':'r027',
    'c':'r027',
    'd':'r027',
    'e':'r047'
};

var step_layer = []; // keys to this
var step_colour = []; // values to this

for(var key in defaultc) {
   setip_layer.push(key);
   step_colour.push(defaultc[key]);
}

答案 1 :(得分:1)

你有一个对象,而不是一个数组。它很简单:

var step_layer = Object.keys(defaultc); // array of property names
var step_colour = Object.values(defaultc); // arrray of property values

但由于.values是非标准方法,.keys仅在现代浏览器上可用且对象属性的迭代顺序无法修复,因此您应该在对象上使用单个循环:

var step_layer = []; // array of property names
var step_colour = []; // arrray of property values
for (var layer in defaultc) {
    step_layer.push(layer);
    step_colour.push(defaultc[layer]);
}

这就是你的代码不同的地方。首先,您从var step_colour = {};开始。这又是一个对象,用于键值映射。因此,甚至可以使用step_colour[layer]访问其属性,但这仍然是undefined。你好像假设它是一个数组,在它上面使用.push - 会引发错误(查看你的调试控制台)。我不确定你想用它实现什么。创建一个数组,克隆defaultc变量?

另一个问题是if (!defaultc.hasOwnProperty(layer))。首先,您的defaultc是一个普通对象,并且不会继承任何可枚举的属性,因此请将该条件保留下来。其次,因为你在上循环的所有layer都是自己的defaultc属性,所以该块永远不会被执行。