就地修改对象javascript

Modifying object in place javascript

本文关键字:javascript 对象 修改      更新时间:2023-09-26

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

  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上循环,如果项的属性rental为false,我想从serviceData中删除该项,而不实际修改serviceData对象。换句话说,创建一个新对象,减去"已删除"项。

我该怎么做???

只需迭代对象键,并只在新对象中设置所需的键:

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'));

请注意,新对象指向相同的项("子对象"),这是一个浅层副本。

首先Object.assign(...)复制整个对象,然后使用"filter"函数根据规则对条目进行排序。

或者使用map函数根据规则返回值,然后使用"filter"对所有null条目进行排序。

作为一个有起点的提示…

我喜欢使用lodash库进行奇怪的操作:)

var newObj = _.omit(serviceData, function(property) {
    return !property.rental;
});

您可以使用for-in循环,并使用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');

您可以使用jquery每个方法:

var res={};
    $.each(serviceData, function( index ) {
  if(serviceData[index].rental)
   res[index] = serviceData[index]
})