我有一个包含键和值的数组,我希望将这些元素推入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;
});
答案 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
属性,所以该块永远不会被执行。