查找并删除Javascript对象数组中的第一个匹配元素

Gaz*_*zer 7 javascript arrays

假设我有一个数组:

    members = [
        {name: 'Anna', class: 'one'}, 
        {name: 'Bob', class: 'two'},  
        {name: 'Chuck', class: 'two'}];

    removed = members.myRemoveByClass('two');     //something like

    // removed is {name: 'Bob', class: 'two'} 
    // members is [{name: 'Anna', class: 'one'}, {name: 'Chuck', class: 'two'}]
Run Code Online (Sandbox Code Playgroud)

我正在寻找一些东西myRemoveByClass.ES2015很好或使用Lodash.该阵列已经订购.问题,我已经看到相当符合我正在寻找的.

Jon*_*lms 7

您可以创建自己的Array类:

 class Members extends Array {
   removeByClass(className) {
     for(const [index, member] of this.entries())
        if(member.class === className) 
           return this.splice(index, 1)[0];
   }
}
Run Code Online (Sandbox Code Playgroud)

用它作为

 const members = new Members([ {/*...*/}, {/*...*/} ]);
 members.removeByClass("...");
Run Code Online (Sandbox Code Playgroud)

PS:"class"是一个非常糟糕的名字,因为它是一个保留的关键字


Mam*_*mun 6

您可以使用Array.prototype.findIndex()

findIndex()方法返回满足提供的测试功能的数组第一个元素的索引。否则,它返回-1,表示没有元素通过测试。

然后splice()按那个索引对象。

var members = [
        {name: 'Anna', class: 'one'}, 
        {name: 'Bob', class: 'two'},  
        {name: 'Chuck', class: 'two'}];
var idx = members.findIndex(p => p.class=="two");
var removed = members.splice(idx,1);     
console.log(removed);
console.log(members);
Run Code Online (Sandbox Code Playgroud)

  • 这是**危险的错误** - 如果没有找到元素,`idx`将为-1,然后`members.splice(idx, 1)`将删除`members`的最后一个元素,这是*不是*在那种情况下你想要什么...... (5认同)