我有一个看起来像这样的对象:
singledispatch
我想循环遍历 var serviceData = {};
serviceData.energy = {commission:15.00, retention:0.00, conversion:0.099, renewal: false, offset:0, rental: true}
serviceData.homeMedia = {commission:20.00, retention:0.00, conversion:0.02, renewal: false, offset:0, rental: true}
serviceData.removal = {commission:4.00, retention:0.00, conversion:0.05, renewal: false, offset:2, rental: true}
serviceData.storage = {commission:6.00, retention:0.09, conversion:0.01, renewal: true, offset:2, rental: true}
serviceData.homeContents = {commission:50.00, retention:0.55, conversion:0.40, renewal: true, offset:0, rental: false}
,如果某个项的属性serviceData
为false,我想从rental
删除该项,而不实际修改serviceData
对象。换句话说,创建一个新对象减去“删除”'项目
我该怎么办?
答案 0 :(得分:2)
只需迭代对象键,只在新对象中设置所需的对象:
var serviceData = {};
serviceData.energy = {commission:15.00, retention:0.00, conversion:0.099, renewal: false, offset:0, rental: true}
serviceData.homeMedia = {commission:20.00, retention:0.00, conversion:0.02, renewal: false, offset:0, rental: true}
serviceData.removal = {commission:4.00, retention:0.00, conversion:0.05, renewal: false, offset:2, rental: true}
serviceData.storage = {commission:6.00, retention:0.09, conversion:0.01, renewal: true, offset:2, rental: true}
serviceData.homeContents = {commission:50.00, retention:0.55, conversion:0.40, renewal: true, offset:0, rental: false}
var filtered = {};
for(var key in serviceData) {
if(serviceData[key].rental) {
filtered[key] = serviceData[key];
}
}
document.write(JSON.stringify(filtered, '\n'));
请注意,新对象指向相同的项目(“子对象”),它是浅层副本。
答案 1 :(得分:1)
首先Object.assign(...)
复制整个对象,然后使用"过滤器"用于根据您的规则对条目进行排序。
或者使用map
函数根据您的规则返回值,然后使用" filter"整理所有null
条目。
正如提示有一个起点......
答案 2 :(得分:1)
我喜欢使用lodash library进行奇怪的操作:)
var newObj = _.omit(serviceData, function(property) {
return !property.rental;
});
答案 3 :(得分:0)
您可以使用for-in
loop并忽略具有false
租借条件的商品的密钥。
function copyData(obj, ignoreKey) {
var copiedObj = {};
for (var key in obj) {
if (key === ignoreKey) {
continue;
}
copiedObj[key] = obj[key];
}
return copiedObj;
}
var newObject = copyObj(serviceData, 'homeContents');
答案 4 :(得分:0)
你可以使用jquery每个方法:
var res={};
$.each(serviceData, function( index ) {
if(serviceData[index].rental)
res[index] = serviceData[index]
})