为什么会有's concat结果中数组的总索引号

Why there's a total index number of arrays in concat result

本文关键字:数组 索引 结果 concat 为什么      更新时间:2023-09-26
var a = ['a', 'b', 'c'];
var b = ['d', 'e', 'f'];
var c = ['g', 'h', 'i'];
var d = [a, b, c];
for (e in d) var f = d.concat(e);
console.log(f); //[Array[3], Array[3], Array[3], "2"]

为什么里面有2?如何在结果出来之前删除2?(不改变结果(

"2"是生成数组的length属性。它包含在内,因为您使用for ... in循环。如果您使用for (var i=0; i<d.length; i++) {...},它将不包括在内。请参见片段。无论如何,在我看来,您可以使用var f = d.slice()简化整个encillada。

引用MDN:

数组索引只是具有整数名称的可枚举属性,在其他方面与常规Object属性相同。不能保证。。。in将按任何特定顺序返回索引,并返回所有可枚举属性,包括那些具有非整数名称的属性和继承的属性
因为迭代的顺序取决于实现,所以在数组上迭代可能不会以一致的顺序访问元素。因此,最好使用带有数字索引的for循环(或Array.prototype.forEach((或for。。。循环的(。

另请参阅。。。

var a = ['a', 'b', 'c'];
var b = ['d', 'e', 'f'];
var c = ['g', 'h', 'i'];
var d = [a, b, c];
var f = [];
for (var i=0; i < d.length; i+=1) {
   f.push(d[i]);
}
document.querySelector("#result").textContent = JSON.stringify(f, null, " ");
<pre id="result"></pre>

好吧,基于其他答案,您现在知道了数组中为什么为"2"的原因。

我试图针对您的实际问题,我可能是假设性的,但是,您似乎想要连接3个数组。

如果我的理解是正确的,你可以试试

var a = ['a', 'b', 'c'];
var b = ['d', 'e', 'f'];
var c = ['g', 'h', 'i'];
var f = a.concat(b).concat(c);
console.log(f); // ["a", "b", "c", "d", "e", "f", "g", "h", "i"]

这是因为您的concat操作,这里e是数组d中元素的索引,试试下面的代码,你会得到一个想法

var a = ['a', 'b', 'c'];
var b = ['d', 'e', 'f'];
var c = ['g', 'h', 'i'];
var d = [a, b, c];
var f ;
for (e in d){
    console.log(e);
    f = d.concat(e);
    console.log(f);
}
console.log(f); //[Array[3], Array[3], Array[3], "2"]

不过,目前还不清楚你期望得到什么样的结果。


编辑1预期输出为d数组。正如你已经定义的二维数组d具有以上所有内容,没有必要将其合并。

console.log(d);

编辑2如果你用这个代码复制数组有办法绕过

var a = ['a', 'b', 'c'];
var b = ['d', 'e', 'f'];
var c = ['g', 'h', 'i'];
var d = [a, b, c];
var f = [];
for (e in d){
    console.log(e);
    f[e] = d[e];
    console.log(f);
}
console.log(f); //[Array[3], Array[3], Array[3]]

以上代码将在数组f 中复制数组d