【发布时间】:2019-09-24 18:04:40
【问题描述】:
我尝试映射一些 JSON 数据并将所有属性设置为 true。
我知道您可以为此使用 map 函数,但是 JSON 的设置方式,数组中的每个对象都有一个键名。
所以当我运行 map 函数时,它会将所有键名设置为 false,而不是对象本身内部的属性。
这是 JSON 数据:
{
"Presentations": {
"Instant": false,
"Daily": false,
"WeeklySummary": false,
"ContentTypeId": 5
},
"Articles": {
"Instant": true,
"Daily": false,
"WeeklySummary": true,
"ContentTypeId": 1
},
"Blogs": {
"Instant": true,
"Daily": false,
"WeeklySummary": true,
"ContentTypeId": 61
},
"NewsBriefs": {
"Instant": false,
"Daily": false,
"WeeklySummary": false,
"ContentTypeId": 2
},
"SpecialInsights": {
"Instant": false,
"Daily": false,
"WeeklySummary": false,
"ContentTypeId": 50
}
}
这是我尝试的map函数,其中data指的是上面的JSON:
Object.entries(data).map(([key, value]) => {
return value === true;
});
这又会返回一个包含五个项目的数组,其值为false:
[false,false,false,false,false]
我正在尝试做的是将任何项目的值翻转为真。
【问题讨论】:
-
@silencedogood 我不这么认为,在那种情况下结果也会一样
-
我真的不明白你想达到什么目的?你能解释一下以获得答案吗?
-
const truthify = o => Object.keys(o).forEach(k => { if (o[k] === false) o[k] = true; if (typeof o[k] === "object") truthify(o[k]); });虽然请注意,如果没有进一步检查,这将是例如还会影响保存数组的属性,数组保存真/假值。这几乎是搜索和 d̵e̵s̵t̵r̵o̵y̵ 设置为真 -
@silencedogood 嗨,如果没有解释清楚,对不起。我想要做的是将数组中每个对象内的所有值更改为 false 值。因此,例如,“Presentations”对象下当前为假的所有属性都将更改为真值。其他对象也是如此。我遇到的问题是我不知道如何达到“第二”级别,可以这么说,目前我的代码只是将键名更改为 false 而不是每个对象本身的属性。跨度>
-
这里没有数组。你有一个对象,里面有对象。这是一个非常重要的区别,因为数组具有与对象不同的属性和方法。
标签: javascript arrays json underscore.js javascript-objects