繁体   English   中英

在lodash中使用嵌套属性从数组中删除对象

[英]Remove object from array with a nested property in lodash

我有这个数组:

var myArray = [{state: {name: 'object #1'}},
               {state: {name: 'object #2'}},
               {state: {name: 'object #3'}}];

我试图用lodash删除state.name'object#1'的对象 目前,我正在这样做:

_.remove(myArray, {
        name: 'object #1'
    });

但这不起作用。 最初,我是这样尝试的,这对我来说是更明显的方法:

_.remove(myArray, {
        state.name: 'object #1'
    });

但这也不起作用,我的JS验证器抱怨其中的点表示法。

您如何在lodash中做到这一点?

_.remove具有谓词功能。 您可以这样操作:

_.remove(myArray, function(arg) {
    return arg.name == 'object #1';
});

在纯js中,使用Array#filter

 var myArray = [{state: {name: 'object #1'}}, {state: {name: 'object #2'}}, {state: {name: 'object #3'}}]; myArray = myArray.filter(v => v.state.name != 'object #1'); console.log(myArray); 

或使用Array#forEach

 var myArray = [{state: {name: 'object #1'}}, {state: {name: 'object #2'}}, {state: {name: 'object #3'}}], newArr = []; myArray.forEach(v => v.state.name !== 'object #1' ? newArr.push(v) : null); console.log(newArr); 

您可以将lodash 拒绝matchProperty速记一起使用。

var result = _.reject(myArray, ['state.name', 'object #1']);

 var myArray = [{ state: { name: 'object #1' } }, { state: { name: 'object #2' } }, { state: { name: 'object #3' } } ]; var result = _.reject(myArray, ['state.name', 'object #1']); console.log(result); 
 body > div { min-height: 100%; top: 0; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script> 

您可以像这样使用_.remove的回调:

_.remove(myArray, function(o) {
    return o.name === 'object #1';
});

或不久使用以下箭头功能

_.remove(myArray, o => o.name === 'object #1');

如果可以在计划JS中使用lodash,为什么还要使用lodash?

myArray = myArray.filter(function(element) {
  return element.state.name !== 'object #1';
})

如果需要从现有数组中删除元素,则可以使用Array.prototype.splice()Array.prototype.findIndex()

 var myArray = [{state: {name: 'object #1'}}, {state: {name: 'object #2'}}, {state: {name: 'object #3'}}]; myArray.splice(myArray.findIndex(({state:{name}}) => name === "object #1"), 1); console.log(myArray); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM