如何删除列表中的对象? Javascript nodejs 和下划线

How to delete a object in a list? Javascript nodejs and underscore

您好,我是 Javascript 和 NodeJS 的新手,但我需要删除列表中包含布尔值的数组中的对象。列表中有 3 个朋友和 2 个 isEvil = true; 的朋友所以我需要删除 2 个朋友并且输出必须是 1。 这是我试过的。

MyTry 1:

_.each(user.friends, function(friend) {
    if(friend.isEvil){
        delete friend;
    }
});
console.log(user.friends.length); //output is 3

如果我这样做,它会删除所有属性,但那里仍然有一个空对象:MyTry 2:

_.each(user.friends, function(friend) {
    if(friend.isEvil){
        delete f.property1;
        delete f.property2;
    }
});
console.log(user.friends.length); //output is 3

我试过的最后一个是:

_.each(user.friends, function(friend, key) {
    if(friend.isEvil){
        delete user.friends[key];
    }
});
console.log(user.friends.length); //output is 3

只需使用 underscore 提供的 _.filter(list, predicate, [context]) 函数:

_.filter(user.friends, function(friend){ 
                             return !friend.isEvil; 
  });

更多信息:http://underscorejs.org/#filter

过滤喜欢的用户好友

user.friends.filter(function (friend) {
    return !friend.isEvil;
});

var frieds = [{ name: 1, isEvil: false }, { name: 2, isEvil: true }, { name: 3, isEvil: true }];

var notEvil = friends.filter(function (friend) {
    return !friend.isEvil;
});

console.log(notEvil);

试试这个,基本上你遍历数组并拼接所有不需要的对象:

for(var i in user.friends){
    if(user.friends[i].isEvil){

         user.splice(i,1)
    } 
}

删除运算符在删除元素的位置留下未定义的数组(请参阅 delete). I believe you should use Splice 删除元素的方法。 或者您可能只是使用内置的下划线方法来过滤您的数组(例如 filter),例如:

user.friends = _.filter(user.friends, function(item) {
    return !item.isEvil;
};

要摆脱邪恶的朋友,你可以使用下划线的 reject 功能:

var niceFriends = _.reject(friends, 'isEvil');

var friends = [
 { id: 'mickey', isEvil: false }, 
 { id: 'donald', isEvil: true }, 
 { id: 'minnie', isEvil: false }
 ];

var niceFriends = _.reject(friends, 'isEvil');

document.getElementById('result').textContent = JSON.stringify(niceFriends);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.2/underscore.js"></script>

<p>
  <pre id="result"></pre>
</p>