我有一些我想要迭代的数据并拒绝那些disabled: true
属性的数据。
然而,当我尝试_.reject
时,我的对象变成了一个数组。
var data = {
stuff: {
item1: {
name: "one",
disabled: true
},
item2: {
name: "two"
}
}
};
data.stuff = _.reject(data.stuff, function(val){
return val.disabled;
});
data.stuff
现在是一个数组,而不是一个Object。我丢失了所有的钥匙。
答案 0 :(得分:5)
您可以改用_.omit()
。
答案 1 :(得分:4)
@archie在代码中说了什么:
data.stuff = _.reduce(data.stuff, function(memo, value, key){
if( !value.disabled) memo[key] = value;
return memo;
}, {});
答案 2 :(得分:3)
当您将data.stuff
(对象)传递给_.reject
时,它只选择对象的值并将其传递给_.reject
。因此,key
信息丢失,无法重建对象。
相反,你可以这样做
data.stuff = _.object(_.filter(_.pairs(data.stuff), function(list) {
return list[1].disabled;
}));
console.log(data);
<强>输出强>
{ stuff: { item1: { name: 'one', disabled: true } } }
工作原理
答案 3 :(得分:1)
我最终只使用原生javascript而不是下划线:
//remove disabled items
for ( var item in data.stuff ) {
if ( data.stuff[item].disabled ) {
delete data.stuff[item];
}
}
答案 4 :(得分:1)
使用_.omit()
:
_.omit(data.stuff, function(val) { return val.disabled; });
答案 5 :(得分:0)
您是否考虑过使用_reduce执行此操作,其中备忘录是一个新哈希,您可以在其中合并所需的项目(键,值对)。
答案 6 :(得分:-1)
使用data.stuff
时,原始reject
不会更改。但由于您要分配stuff
密钥,原始数据将丢失。
_.reject
应该可以处理并返回数组。你可以尝试这样做,以实现你想要的:
_.each(Object.keys(data.stuff), function(val) {
if (data.stuff[val].disabled)
delete data.stuff[val];
});