简体   繁体   English

生成多维动态javascript数组

[英]generating multidimensional dynamic javascript array

I am trying to generate n arrays with a for loop and push an extra element from another array of n using for loop to each of these arrays. 我正在尝试使用for循环生成n数组,并使用for循环从n其他数组中推送一个额外的元素到每个这些数组。

var userlist = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'];

var selectlist = ['c', 'f', 'k'];

get_field_options = userlist.filter(function (el) {
    return selectlist.indexOf(el) < 0;
});

var selectlen = selectlist.length;
var op_arr = new Array();

for (var i = 0; i < selectlen; i++) {
    op_arr[i] = new Array();
    op_arr[i] = get_field_options;
    op_arr[i].push(selectlist[i]);
    console.log(op_arr[i]);
}

here is my working fiddle . 这是我工作的小提琴

but its adding items to same array each time. 但每次都会将项目添加到同一数组。 what I am doing wrong? 我做错了什么?

this line op_arr[i] = get_field_options; 这行op_arr[i] = get_field_options; makes your arrays reference to the same object. 使您的数组引用同一对象。

You need to clone get_field_options to get a new array. 您需要克隆 get_field_options以获得一个新数组。 One simple way to clone is to use JSON.stringify like this. 一种简单的克隆方法是像这样使用JSON.stringify。

op_arr[i] = JSON.parse(JSON.stringify(get_field_options));

Yet another way, use map and concat functions 还有一种方法,使用mapconcat函数

var op_arr = selectlist.map(function(el){
    return get_field_options.concat(el);
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM