如何删除列表中的对象? 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;
});
过滤喜欢的用户好友
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>
您好,我是 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;
});
过滤喜欢的用户好友
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>