[英]How to Push array values to diffrent 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;
});
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]);
}
您有一个对象,而不是数组。 它很简单:
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
自身属性,因此该块将永远不会执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.