如何从数组中删除一个特定值? 类似 :
array.remove(value);
制约:我必须使用核心 JavaScript 。 框架不允许 。
如何从数组中删除一个特定值? 类似 :
array.remove(value);
制约:我必须使用核心 JavaScript 。 框架不允许 。
当前回答
[2,3,5].filter(i => ![5].includes(i))
其他回答
使用过滤器是实现此要求的优雅方式。 过滤器不会改变原始数组 。
const num = 3; 允许 rr = [1, 2, 3, 4]; const arr2 = arr. filter(x xx x x !x != num); 控制台. log (rr); / / [1, 2, 3, 4] 控制台. log(rr2) / / [1, 2, 4]
如果您想要实现突变删除行为, 您可以使用过滤器, 然后将结果指定到原始数组 。
constnum = 3; let arr = [1, 2, 3, 4]; arr = arr. filter(x x \ x = = = = = = = = = = = = = = = = = =; 控制台. log(rr); / / [1, 2, 4]
顺便说一下, 过滤器将删除在条件中匹配的所有事件( 不仅仅是第一次发生) , 就像您在下面的例子中看到的一样 。
const num = 3; 允许 rr = [1, 2, 3, 3, 3, 3, 4]; arr = arr. filter(x x x x x = = = = = = = = num; 控制台. log (rr); / / [1, 2, 4]
万一您只想删除第一种情况,您可以使用复数法
onst num = 3; 让 arr = [1, 2, 3, 3, 3, 3, 4]; const idx = rr. indexof( num); arr.spice( idx, idx) = = 1 = 1 = 1 = 1 ; 控制台. log( rr) = [ 1, 2, 3, 3, 3, 4] / [ 1, 3, 3, 4]
如果元素存在多个实例,您可以进行后回循环,以确保不破坏索引。
var myElement = "chocolate"; var my Array = [“cocolate ”、“potart”、“potart”、“potart”、“potart”、“cocolate”、“potart”、“potart”、“cococolate ”]; / * 重要代码 * / 用于 (var i = my Array. lary - 1; i & 0; i-) {如果 (my Array [i] = my Element) my Array.spolice (i, 1);}控制台.log (my Array); {如果 (my Array [i] = my Element) my Array.splice (i, 1);} 控制台(my Array);
您可以使用 lodash _. pull( 调和数组)、 _. pullAt( 调和数组) 或 _. 。 (不变换数组)
var array1 = ['a', 'b', 'c', 'd']
_.pull(array1, 'c')
console.log(array1) // ['a', 'b', 'd']
var array2 = ['e', 'f', 'g', 'h']
_.pullAt(array2, 0)
console.log(array2) // ['f', 'g', 'h']
var array3 = ['i', 'j', 'k', 'l']
var newArray = _.without(array3, 'i') // ['j', 'k', 'l']
console.log(array3) // ['i', 'j', 'k', 'l']
主要有两种办法:
当您对数组使用删除时要小心。 它有利于删除对象的属性, 但对于数组则不好。 最好对数组使用复数符。
请注意, 当您对数组使用删除时, 您可能会对 anArray. 长度得出错误的结果。 换句话说, 删除将会删除元素, 但不会更新长度属性的值 。
使用删除后,也可以期望在索引编号上出现空洞,例如,最后可能会出现第1、3、4、8、9和11号指数,其长度和之前一样被删除。在这种情况下,所有环形索引都会崩溃,因为指数不再相继。
如果您由于某种原因被迫使用删除, 那么当您需要通过数组循环时, 您应该对每个循环使用。 事实上, 如果可能的话, 总是避免使用已索引过的循环。 这样代码就会更加稳健, 并且不易遇到索引问题 。
于2016年10月16日编辑
如果浏览器不支持 JavaScript 标准函数, 请按标准 JavaScript 函数执行, 如果您的浏览器不支持这些函数 - 使用多填
在此代码示例中, 我使用数组. filter (...) 函数从数组中删除不想要的项目 。 此函数不会改变原始数组, 创建一个新的数组 。 如果您的浏览器不支持此函数( 例如, 版本 9 之前的 Internet Explorer 或版本 1. 5 之前的 Firefox) , 请考虑以 Core- js 组合填充 。
删除项目( ECMA-262 版5 代码 AKA 旧风格 JavaScript)
var value = 3
var arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(function(item) {
return item !== value
})
console.log(arr)
// [ 1, 2, 4, 5 ]
删除项目( ECMAScript 6 代码)
let value = 3
let arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(item => item !== value)
console.log(arr)
// [ 1, 2, 4, 5 ]
IMPORTANT ECMAScript 6 () 箭头函数语法在互联网探索器、 45 版本前的Chrome、 22 版本前的Firefox 和 10 版本前的Safari 中完全不支持。 要在旧浏览器中使用 ECMAScript 6 语法, 您可以使用 BabelJS 。
删除多个项目( ECMAScript 7 代码)
此方法的另一个好处是,您可以删除多个项
let forDeletion = [2, 3, 5]
let arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(item => !forDeletion.includes(item))
// !!! Read below about array.includes(...) support !!!
console.log(arr)
// [ 1, 4 ]
IMPORANT 矩阵。 包含(...) 函数在 Internet Explorer 中根本不支持, Chrome 版本47, Firefox 版本43, Safari 版本9, 版本14 之前的边缘中根本不支持, 但是您可以使用核心js 进行多种填充 。
删除多个项目( 未来, 也许)
如果这个“ 丁字语法” 提案被接受, 你就可以做到:
// array-lib.js
export function remove(...forDeletion) {
return this.filter(item => !forDeletion.includes(item))
}
// main.js
import { remove } from './array-lib.js'
let arr = [1, 2, 3, 4, 5, 3]
// :: This-Binding Syntax Proposal
// using "remove" function as "virtual method"
// without extending Array.prototype
arr = arr::remove(2, 3, 5)
console.log(arr)
// [ 1, 4 ]
尝试自己在 BabelJS :)
参考参考参考参考参考文献
包括职能构成