【问题标题】:How to change values of every id in this nested object array?如何更改此嵌套对象数组中每个 id 的值?
【发布时间】:2021-07-29 13:38:46
【问题描述】:

我有类似这样的数据结构

{"id": 1, "a": [{"id": 2, "b": [{"id": 3, "c": [{"id": 4}]}]}]}

我想将每个id 更改为null

我知道我可以循环并手动将null 分配给id。在 JavaScript 中有没有简单的方法来做到这一点?

【问题讨论】:

  • JSON.parse(JSON.stringify(x),(k,v)=>k==='id'?null:v); - 当然,这不会改变原始文件 - 但您没有指定是否要就地改变
  • @NanDa,别忘了mark an answer as accepted

标签: javascript arrays object nested


【解决方案1】:

无需将对象更改为 JSON 字符串,您可以使用递归:

function clearIds(obj) {
    if ("id" in Object(obj)) obj.id = null;
    Object.values(Object(obj)).forEach(clearIds);
}

// Demo
let obj = {"id": 1, "a": [{"id": 2, "b": [{"id": 3, "c": [{"id": 4}]}]}]};
clearIds(obj);
console.log(obj);

这会改变给定的对象。

为了好玩:与单线相同的功能:

const clearIds = o => "id" in Object(o) && (o.id = null) || Object.values(Object(o)).forEach(clearIds);

// Demo
let obj = {"id": 1, "a": [{"id": 2, "b": [{"id": 3, "c": [{"id": 4}]}]}]};
clearIds(obj);
console.log(obj);

【讨论】:

  • 哦,现在这不公平:p 就地单线 - 我不能两次投票给你!!!
  • 非常感谢@trincot,这确实很有帮助。你是救生员。一个班轮的解决方案!
【解决方案2】:

Bravo 的评论很有启发性,所以我希望他们不介意我在这里展开。

  1. 将对象变成字符串。

  2. 再次将其解析回对象。

我不知道JSON.parsea "reviver" function 允许您在解析字符串值时对其进行转换。

const data = {"id": 1, "a": [{"id": 2, "b": [{"id": 3, "c": [{"id": 4}]}]}]};

// Turn the data into a string
const str = JSON.stringify(data);

// Parse the string back to an object
// but using the reviver function to turn the value of any id
// keys to null
const newObj = JSON.parse(str, (key, value) => key === 'id' ? null : value);

console.log(newObj);

【讨论】:

  • 一切都好 - 我不确定 OP 是否想原地改变 - 原地改变会有所不同 - 递归地深入对象 - 但也不是那么难。我只喜欢一个班轮
  • 是的,我只是不知道 reviver 功能,并认为它很有趣。
  • 当您想要(需要)绕过加载微软的 cruft 以使用 WCF 时,对 WCF 中的日期很有用 - 如果这有任何意义 - 在 JSON 格式中,日期被“编码”,如“/Date(1234567890) )/" - 我还使用 stringify replacer 将日期发送到 WCF
  • 非常感谢@Andy,这确实很有帮助。我也刚刚想到将其转换为字符串并使用正则表达式将 id 值替换为 null。但是您的解决方案不必使用正则表达式。做得好!是的,输出是正确的。这就是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 2017-09-22
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多