修改对象javascript

时间:2015-12-22 22:39:43

标签: javascript jquery

我有一个看起来像这样的对象:

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对象。换句话说,创建一个新对象减去“删除”'项目

我该怎么办?

5 个答案:

答案 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]
})

pen