javascript - 嵌套对象: Update all attributes with same names

标签 javascript arrays typescript object

我有一个带有多个嵌套对象的退出复杂对象。 我想复制并更新该对象的所有 id 属性。

所以这个:

{
  id: 1,
  name: "A",
  car: {
    id: 2,
    vendor: "xy"
    }
  ..
}

应该变成这样:

{
  id: 6,
  name: "A",
  car: {
    id: 7,
    vendor: "xy"
    }
  ..
}

有没有办法用 JavaScript (TypeScript) 以简短而通用的方式实现这一点?

更新: 到目前为止我做了什么:

const a = new MyClass();
a.id = uuid();
a.name = "A"
a.car = new Car();
a.car.id = uuid();
a.car.vendor = "xy"

//copy a
const b = JSON.parse(JSON.stringify(a));

我想做的就是将 b 中的所有 id 增加 5。

最佳答案

您可以循环遍历 b 中的所有项目并执行两件事。如果它是 id 属性,请更改它(添加 5)。如果它是一个对象,则循环并检查两个相同的条件(递归函数)。您可以这样做:

function checkObject(obj) {
    Object.keys(obj).forEach(function(prop) { 
        if (typeof obj[prop] == "object" && prop !== null) { 
            checkObject(obj[prop]);
        }
        else if (prop == "id") {
            obj[prop] += 5;
        }
    })
}

然后你可以这样调用它:

function checkObject(obj) {
    Object.keys(obj).forEach(function(prop) { 
        if (typeof obj[prop] == "object" && prop !== null) { 
            checkObject(obj[prop]);
        }
        else if (prop == "id") {
            obj[prop] += 5;
        }
    })
}

var b = {
  id: 1,
  name: "A",
  car: {
id: 2,
vendor: "xy"
}
 }

checkObject(b);
console.log(b);

关于javascript - 嵌套对象: Update all attributes with same names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53867629/

相关文章:

javascript - 如何处理同一页面中两个不同的数据主属性?

javascript - jQuery 图像交换 if-else 语句不起作用

java - 如果使用数组作为HashMap中某个键对应的值,如何获取数组的单个值?

python - 如何在多维数组中添加元素

angular - Swagger 代码生成 --> angular6 : rxjs observable compile error

angular - TypeScript 中的 @ 符号是什么?

javascript - Twitter Bootstrap TypeAhead 与具有自动完成功能的下拉列表/选择标签一样工作

javascript - 使用 Javascript 计算数组中元素的数量

javascript - Angular2订阅了解箭头功能

javascript - 尝试获取样式元素时未获得正确的输出