如何从数组中删除一个特定值? 类似 :
array.remove(value);
我必须使用核心核心核心JavaScript。 不允许框架 。
如何从数组中删除一个特定值? 类似 :
array.remove(value);
我必须使用核心核心核心JavaScript。 不允许框架 。
当前回答
let removeAnElement = (arr, element)=>{
let findIndex = -1;
for (let i = 0; i<(arr.length); i++){
if(arr[i] === element){
findIndex = i;
break;
}
}
if(findIndex == -1){
return arr;
}
for (let i = findIndex; i<(arr.length-1); i++){
arr[i] = arr[i+1];
}
arr.length -= 1;
return arr;
}
let array = ['apple', 'ball', 'cat', 'dog', 'egg'];
let removeElement = 'ball';
let tempArr2 = removeAnElement(array, 'dummy');
console.log(tempArr2);
// ['apple', 'cat', 'dog', 'egg']
let tempArr = removeAnElement(array, removeElement);
console.log(tempArr);`enter code here`
// ['apple', 'cat', 'dog', 'egg']
其他回答
强调.js可用于解决多个浏览器的问题。 如果存在的话, 它会使用在建浏览器的方法。 如果像旧版的互联网探索者一样缺少这些方法, 它会使用自己的自定义方法 。
从数组中删除元素( 从网站) 的简单示例 :
_.without([1, 2, 1, 0, 3, 1, 4], 0, 1); // => [2, 3, 4]
更现代一点ECMAScript 2015(原称和谐或ES6)方法。
const items = [1, 2, 3, 4];
const index = 2;
然后:
items.filter((x, i) => i !== index);
弹出 :
[1, 2, 4]
今天(2019-12-09),我为选择的解决方案对macOS v10.13.6(高塞拉利昂)进行性能测试。delete
(A),但与其他方法相比,我并不使用它,因为它在数组中留下了空白。
结 结 结 结 结 结 结
array.splice
(C) (小型阵列有第二次的Safeare除外)array.slice+splice
(H) 是Firefox和Safari最快、不可改变的解决办法;Array.from
(B) 铬含量最快在测试中,我以不同的方式从数组中删除中间元素。A、C本地的解决方案。B、D、E、F、G、H解决方案是不可改变的。
包含 10 元素的阵列结果
在铬array.splice
(C) 是当地最快的解决办法。array.filter
(D) 是最快、不可改变的解决方案。array.slice
(F). 您可以在机器上进行测试在这里.
带有 1 000 000 元素的阵列结果
在铬array.splice
(C) 是最迅速的就地解决办法delete
(C) 的快速性相似,但它在数组中留下了一个空位(因此它不执行“完全移除”)。array.slice-splice
(H) 是最快的不可改变的解决方案。 最慢的是array.filter
(D和E). 您可以在您的机器上进行测试。在这里.
var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var log = (letter,array) => console.log(letter, array.join `,`);
function A(array) {
var index = array.indexOf(5);
delete array[index];
log('A', array);
}
function B(array) {
var index = array.indexOf(5);
var arr = Array.from(array);
arr.splice(index, 1)
log('B', arr);
}
function C(array) {
var index = array.indexOf(5);
array.splice(index, 1);
log('C', array);
}
function D(array) {
var arr = array.filter(item => item !== 5)
log('D', arr);
}
function E(array) {
var index = array.indexOf(5);
var arr = array.filter((item, i) => i !== index)
log('E', arr);
}
function F(array) {
var index = array.indexOf(5);
var arr = array.slice(0, index).concat(array.slice(index + 1))
log('F', arr);
}
function G(array) {
var index = array.indexOf(5);
var arr = [...array.slice(0, index), ...array.slice(index + 1)]
log('G', arr);
}
function H(array) {
var index = array.indexOf(5);
var arr = array.slice(0);
arr.splice(index, 1);
log('H', arr);
}
A([...a]);
B([...a]);
C([...a]);
D([...a]);
E([...a]);
F([...a]);
G([...a]);
H([...a]);
This snippet only presents code used in performance tests - it does not perform tests itself.
浏览器比较:Chrome v78.0.0,Safari v.13.0.4和Firefox v71.0.0
由你决定如何行动。
一种做法是使用splice
从数组中删除项目的方法 :
let array = [1, 2, 3]
array.splice(1, 1);
console.log(array)
// return [1, 3]
但要确保您通过第二个参数,否则最终会删除索引后的全部数组。
第二种办法是使用filter
其好处在于它是不可改变的 这意味着您的主数组不会被操纵 :
const array = [1, 2, 3];
const newArray = array.filter(item => item !== 2)
console.log(newArray)
// return [1, 3]
您永远不应该根据功能性编程模式改变您的阵列。 您可以创建一个新的阵列, 而不引用您想要更改的数据 ECMAScript 6 方法 。filter
;
var myArray = [1, 2, 3, 4, 5, 6];
假设您想要删除5
从数组中,您可以简单地这样做:
myArray = myArray.filter(value => value !== 5);
这将给您一个没有您想要删除的值的新数组。 因此结果将是 :
[1, 2, 3, 4, 6]; // 5 has been removed from this array
关于进一步理解,请阅读MDN文件:Array.过滤器.