javascript:数组循环
javascript: Array looping
我有两个包含2个数组的an对象。我想以这样一种方式创建循环,即第一个数组的每个元素都被连接到第二个数组的每一个元素。
{'array1':['a','b'],'array2':['1','2']}
它应该创建新的阵列
['a,1':{'prop1':""},'a,2':{'prop1':""},'b,1':{'prop1':""}, 'b,2':{'prop1':""}]
如何在javascript中做到这一点。
你的输出是不可能的,这是无效的语法:
["abc": {...}]
你想输出的是一个像这样的对象:{"abc": {..}}
您将需要对两个数组进行迭代,一个外部迭代和一个内部迭代:
var input = {'array1':['a','b'],'array2':['1','2']};
var output = {};
// Outer iteration:
// a1 will contain each value from array1 (a, b)
input.array1.forEach(function(a1) {
// Inner iteration:
// a2 will contain each value from array2 (1, 2)
input.array2.forEach(function(a2) {
// Concatenate the to values (`a,1`, `a,2`, `b,1`, `b,2`) and assign the dummy object:
output[a1+','+a2] = { prop1: '' };
});
});
console.log(output); // {"a,1":{"prop1":""},"a,2":{"prop1":""},"b,1":{"prop1":""},"b,2":{"prop1":""}}
这里有一个构建在@dev-null解决方案上的函数。这将以您想要的方式重新构造对象,但不依赖于键的名称或对象中的数组数量。它应该处理任何长度的输入对象,只要其结构相同即可。此外,我确信有一种方法可以优化它,但对于这个例子来说,它似乎足够快了。
var input = {
'array1':['a','b'],
'array2':['1','2', '3'],
'array3':['x','y', 'z']
};
var output = combineObj(input);
console.log(output);
// In: an object of arrays
// Returns restructured object
function combineObj(obj) {
var allVals = [];
var locatoins = [0];
var output = {};
var keys = Object.keys(obj).sort();
var counter = 0;
// combine each individual array into one big array
keys.forEach(function(objItem, indx){
obj[objItem].forEach(function(aryItem){
allVals.push(aryItem);
counter++;
});
locatoins.push(counter);
});
// Used in combination with the locations array to track where a new array begins
// The purpose of this is so items from the same array in input aren't combined
var iterator = 1;
for( i=0; i < allVals.length; i++ ){
if(i == locatoins[iterator]){
iterator++;
}
for( j = 0; j < allVals.length; j++ ){
if( j >= locatoins[iterator-1] && j < locatoins[iterator] ){
continue;
}
output[allVals[i] + ', ' + allVals[j]] = { prop1: '' };
}
}
return output;
}
相关文章:
- 如何将angularjs中的javascript字符串输出为循环数组
- 如何从某个位置顺时针和逆时针循环数组
- 赢得't循环数组javascript
- 通过循环数组内容
- 使用RegExp循环数组而不是for循环(Javascript)
- 如何在背景图像的循环数组中预加载图像
- 如何在循环数组内部推送变量值
- Javascript循环数组无限不起作用
- 如何循环数组
- 如何使用Handlebars循环数组对象和模板
- PHP同时循环数组数据显示到javascript中
- 如何使用上一个/下一个功能循环数组中的图像
- 如何循环数组并保持它们之间的索引增长
- Javascript循环数组以查找可被3整除的数字
- 以变量作为属性的循环数组
- 嵌套的“for”循环 - 数组未定义
- 在具有主干和车把的模型中循环数组
- 数组在 for 循环与第二个 for 循环数组 JavaScript 合并
- 对于javascript和jquery的循环数组问题
- 在循环数组 javascript 后替换对象属性值中的字符串