这只是我正在研究的简单javascript练习。
我正在尝试转换此数组...
var array = [
[1,2],
[3,4],
[5,6]
];
进入...
array = [1, 2, 3, 4, 5, 6];
使用此嵌套的for循环。
var series;
var storage = [];
for (var i = 0; i < array.length; i++) {
for (var j = 0; j < array[i].length; j++) {
series = array[i][j];
for (var k = 0; k < 6; k++) {
storage[k] = series;
};
};
};
console.log(storage);
输出为...
//Output: [6, 6, 6, 6, 6, 6]
为什么这是输出,我该如何解决?
答案 0 :(得分:2)
series = array[i][j];
for (var k = 0; k < 6; k++) {
storage[k] = series;
};
严重的是,您在这里为结果数组的每个元素设置了相同的值。
您可能需要类似的东西
for(let x of array) {
for(let y of x) {
storage.push(y)
}
}
或者,如果您的JS机器具有足够的实验性,只需
var storage = array.flat()
答案 1 :(得分:2)
for (var k = 0; k < 6; k++) {
不是必需的。 array[i]
将是主数组中的每个元素,因此在array[i]
上进行迭代,您可以访问每个元素
var array = [
[1, 2],
[3, 4],
[5, 6]
];
var series;
var storage = [];
for (var i = 0; i < array.length; i++) {
for (var j = 0; j < array[i].length; j++) {
storage.push(array[i][j])
};
};
console.log(storage);
答案 2 :(得分:1)
您可以混合使用reduce和concat一行来实现所需的功能
var array = [
[1, 2],
[3, 4],
[5, 6]
];
console.log(array.reduce((a, v) => a.concat(v), []));
至于为什么您的代码无法正常工作,主要取决于这一点
for (var k = 0; k < 6; k++) {
storage[k] = series;
};
它将使用最后一个值为series
的值覆盖数组中的所有内容,在您的情况下为6
答案 3 :(得分:1)
Array.concat可以自行执行
var merged = [].concat.apply([], array);
答案 4 :(得分:1)
var array = [
[1,2],
[3,4],
[5,6]
];
var newArray = [];
for (let i = 0; i < array.length; i++) {
newArray = newArray.concat(array[i]);
}
console.log(newArray)
答案 5 :(得分:0)
您可以使用getActiveItemIndex
参考:flatten
if (activeIndex == 1) {
$('.opc-summary-wrapper').css("display", "block");
}
else {
$('.opc-summary-wrapper').css("display", "none");
}
答案 6 :(得分:0)
您可以使用ES6传播语法,如下所示:
$content = utf8_decode($dom->saveHTML($dom->documentElement));
答案 7 :(得分:0)
storage = [];
for(var i=0; i<array.length; i++)
storage = storage.concat(array[i]);
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat