如何从数组中删除一个特定值? 类似 :
array.remove(value);
制约:我必须使用核心 JavaScript 。 框架不允许 。
如何从数组中删除一个特定值? 类似 :
array.remove(value);
制约:我必须使用核心 JavaScript 。 框架不允许 。
当前回答
使用 JavaScript 从数组中删除一个项的几种方法 。
所描述的所有方法都不改变原始数组,而是创建一个新的数组。
如果您知道某个项目的索引
假设您有一个阵列, 您想要删除位置 i 上的项目 。
一种方法是使用切片( ) :
const items = [a], 'b','c','d','e','f'] const i = 3 const 过滤项目 = items.selice(0, i).concat( items.selice( i+1, items. long)) 控制台.log( 过滤项目)
切片 () 创建新数组, 使用它收到的索引 。 我们只需创建一个新数组, 从开始到要删除的索引, 并且将另一个数组从我们删除后的第一个位置集中到数组的末尾 。
如果您知道数值
在这种情况下,一个很好的选择是使用过滤器(),这提供了一种更宣示性的方法:
Const 项 = [“ a ”、“ b ” 、 “ c ” 、 “ d ” 、 “ e ” 、 “ f ” 、 “ f ” 等值 Toremove = “ c” 等式过滤项目 = 项. filter (项目 项 ! ! ! = ex 值 to remove) 控制台.log (过滤项目 )
此选项使用 ES6 箭头函数。 您可以使用传统函数支持旧的浏览器 :
const items = ['a', 'b','c','d','d','e','f'] const value to remove ='c' const 过滤项目= items. filter(功能(项目) {返回项目!}== value to remove}控制台.log(过滤项目)
或者你可以使用 Babel 将ES6代码转换回ES5, 使旧浏览器更容易消化, 而在您的代码中写入现代 JavaScript 。
删除多个项目
如果不是单项,而是要删除许多项,会怎么样?
让我们找到最简单的解决方案
按指数分列的指数
您可以在序列中创建函数并删除项目 :
const items = [a], b', c', d', d', e', e', e', f'] const demote =( items, i) = items = (items, i, i' i) {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}} {{{{{{{{{{{{{{{{{{{{}}}}}} {{{{{{{{{{{{{{}}}{{{{{{{{{{{{{{}}}}{{{{{{{{{{{{{{{{{{{}}}} {{{{{{{{{{{{{}}}}}{{{{{{{{}}}}}}}{{{{{{{{}}}}}}{{{{{{{{{{{{}}}}}}}}}}}{{{{{{{{{}}}}}}}}}}}}}}}{{{{{}}}}}}}{{}}}}{{{{{}}}}}{{{{{}}}}}}}}}{{{{{{{{{{{{{{{{}}}}}{{{{{{{{{{}}}}}}}}{{{{}}}}{{{{{{{{{{}}}}{}}}}}}}}}{}}}}}}}}}}}}}}}}}}{}}}}}}}}}}}{{}{{}{}{}}}}{{}}}}}}}}}}{}{}{}
以数值计
您可以在回溯函数中搜索包含内容 :
const items = ['a', 'b', 'c','d','d','e','f'] const value to remove = ['c','d'] comst filtems = items. filter(项目 \\\ ? $values to remove.) 包括(项目) // ["a","b","e","f" 控制台。log(过滤项目)
避免突变原始数组
plice() spolice () (不得与切片() 相混淆) 使原始数组变形, 并应避免 。
(最初张贴在我的网站上:https://flaviocopes.com/how-to-remove-itm-from-array/)
其他回答
对于任何想要复制一种方法的人,如果想复制一种方法,返回一个重复删除数字或字符串的新阵列,则从现有答案中归纳如下:
function uniq(array) {
var len = array.length;
var dupFree = [];
var tempObj = {};
for (var i = 0; i < len; i++) {
tempObj[array[i]] = 0;
}
console.log(tempObj);
for (var i in tempObj) {
var element = i;
if (i.match(/\d/)) {
element = Number(i);
}
dupFree.push(element);
}
return dupFree;
}
弹出 - 从阵列变化的结尾处删除 - 从阵列复件的开头处删除 - 从特定的阵列索引过滤器中删除 - 允许您程序化地从阵列中删除元素
您可以对每个数组项进行循环, 如果在您的数组中存在的话, 可以复制并连接它 。
function destroy(arr, val) {
for (var i = 0; i < arr.length; i++) if (arr[i] === val) arr.splice(i, 1);
return arr;
}
主要有两种办法:
当您对数组使用删除时要小心。 它有利于删除对象的属性, 但对于数组则不好。 最好对数组使用复数符。
请注意, 当您对数组使用删除时, 您可能会对 anArray. 长度得出错误的结果。 换句话说, 删除将会删除元素, 但不会更新长度属性的值 。
使用删除后,也可以期望在索引编号上出现空洞,例如,最后可能会出现第1、3、4、8、9和11号指数,其长度和之前一样被删除。在这种情况下,所有环形索引都会崩溃,因为指数不再相继。
如果您由于某种原因被迫使用删除, 那么当您需要通过数组循环时, 您应该对每个循环使用。 事实上, 如果可能的话, 总是避免使用已索引过的循环。 这样代码就会更加稳健, 并且不易遇到索引问题 。
正在删除带有索引和相交点的值 !
function removeArrValue(arr,value) {
var index = arr.indexOf(value);
if (index > -1) {
arr.splice(index, 1);
}
return arr;
}