如何正确迭代数组并显示实际数组

时间:2017-05-27 10:38:59

标签: javascript arrays

这是我心中的一个长期问题。如果我遍历一个数组而我放return array[i]它默认只显示第一个元素。

迭代数组,显示所有元素/项目的更好方法是什么?

下面我正在处理我的函数,它跳过数组[n]并显示整个数组期望第n个。

function getAllElementsButNth(array, n) {
  for (var i=0; i < array.length; i++) {
    // array.splice(0, array[n]);
    // return array;
     if (i === n) { 
       continue; 
     }
    return array[i];
  }
}

var output = getAllElementsButNth(['a', 'b', 'c'], 1);
console.log(output); // --> ['a', 'c']

我注意到使用console.log只会用新行显示它们。我指的是显示实际的数组本身。我在这里使用了返回,它只允许我显示'a'。

任何帮助?

4 个答案:

答案 0 :(得分:2)

您根本不需要遍历数组,或者具有此功能。你只需要这样做:

var output = array.splice(index, 1)

array.splice方法有两个参数:第一个是删除元素的索引,第二个是要移除的元素数,在您的情况下为-1。

output将保留已删除元素的值,而初始数组将被拼接并包含除index之外的所有原始元素。

答案 1 :(得分:1)

您可能想要使用array.filter

https://jsfiddle.net/5z09ahrq/

function getAllElementsButNth(array, n) {
  return array.filter(function(e, i) {
    return i !== n;
  });
}

var output = getAllElementsButNth(['a', 'b', 'c'], 1);
console.log(output); // --> ['a', 'c']

简洁易读。此外,逻辑上适用于该问题。

但是,它可能不是最有效的解决方案,因为它会迭代整个数组。

因此,使用es6的另一种可能(更有效)的方法(因为已经存在使用切片的其他解决方案):

function getAllElementsButNth(array, n) {
  return new Array(...array.slice(0, n), ...array.slice(n+1, array.length));
}

答案 2 :(得分:0)

尝试使用Array#slice()方法

&#13;
&#13;
function getAllElementsButNth(arr, p) {
  if (p - 1 < arr.length) { // its validate p lesser the array length
    return arr.slice(p - 1)[0];
  }
  
}

console.log(getAllElementsButNth(['a', 'b', 'c'], 1))
console.log(getAllElementsButNth(['a', 'b', 'c'], 2))
&#13;
&#13;
&#13;

答案 3 :(得分:0)

解决方案而不改变原始数组:filter

var arr = [1,2,3,4,5,6,7,8];

var index = 5;

var r = arr.filter((el, i) => i !== index);

console.log(r)