Javascript切片不能给出正确的数组长度值

时间:2018-01-29 20:54:53

标签: javascript

enter image description here

为什么说长度为1而不是4? 以下是我尝试推送和切片的内容。我尝试追加items.image_urls并将它们分成5个。

items.image_urls是我的字典数组。

var final_push = []
final_push.push(items.image_urls.splice(0,5))
console.log(final_push.length)## gives me 1...?

var index = 0
final_push.forEach(function(results){
   index++ ##this gives me one. I would need 1,2,3,4,5,1,2,3,4,5. Somehting along that.
}

items.image_urls看起来像这样: 它是带有图像网址的数组的迭代。 enter image description here

3 个答案:

答案 0 :(得分:1)

这似乎是一个嵌套数组。因此,如果您要访问索引0,然后像下面那样处理该数组,它可能会起作用:

console.log(final_push[0].length); //should print 4

答案 1 :(得分:1)

在您的示例items.image_urls.splice(0,5)中,返回从items.image_urls中删除的项目数组。当您调用final_push.push(items.image_urls.splice(0,5));时,整个数组将作为一个项目推送到final_push数组,因此它现在看起来像[["url1", "url2", "url3", "url4", "url5"]](二维数组)。您可以通过调用final_push[some_index]来访问整个数组。

但您想要的是将items.image_urls.splice(0,5)的每个元素添加到final_push。您可以使用spread operator来实现此目的:

final_push.push(...items.image_urls.splice(0,5));
  

Spread语法允许迭代,例如数组表达式或字符串   在零或多个参数的地方扩展(用于函数   调用)或元素(对于数组文字)是预期的

这正是我们的情况,因为push()需要一个或多个参数:

arr.push(element1[, ...[, elementN]])

这是一个例子:



let items = {
    image_urls: ["url1", "url2", "url3", "url4", "url5", "url6", "url7", "url8", "url9", "url10"]
};

let final_push = [];
final_push.push(...items.image_urls.splice(0,5)); 

console.log(final_push.length);
console.log(JSON.stringify(final_push));
console.log(JSON.stringify(items.image_urls));




注意:不要将Array.prototype.slice()Array.prototype.splice()混淆 - 第一个将数组的一部分的浅表副本返回到新的数组对象而第二个通过删除现有元素和/或添加新元素来更改数组的内容返回包含已删除元素的数组

答案 2 :(得分:0)

作者正在混淆spliceslice。可能是一个错字:)

从开头(0)开始,然后删除5个项目。