0

我有一个包含键和值的数组,我想将哪些元素推入 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;
});
4

2 回答 2

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]);
}
于 2012-06-06T10:55:46.207 回答
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您循环的所有 s都是的自己的属性defaultc,因此该块将永远不会被执行。

于 2012-06-06T10:53:47.117 回答