这是我心中的一个长期问题。如果我遍历一个数组而我放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'。
任何帮助?
答案 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()
方法
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;
答案 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)