Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将对象数组的所有属性设置为true?_Javascript_Arrays_Json_Underscore.js_Javascript Objects - Fatal编程技术网

Javascript 如何将对象数组的所有属性设置为true?

Javascript 如何将对象数组的所有属性设置为true?,javascript,arrays,json,underscore.js,javascript-objects,Javascript,Arrays,Json,Underscore.js,Javascript Objects,我试图映射一些JSON数据,并将所有属性设置为true 我知道您可以使用map函数来实现这一点,但是按照JSON的设置方式,数组中的每个对象都有一个键名 因此,当我运行map函数时,它会将所有键名设置为false,而不是对象本身内部的属性 以下是JSON数据: { "Presentations": { "Instant": false, "Daily": false, "WeeklySummary": false, "Con

我试图映射一些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]

我试图做的是将任何项目的值从false翻转为true。

您不需要映射任何内容

var arr = your_json;
for(a in arr){
    arr[a]['Instant'] = true;
    arr[a]['Daily'] = true;
    arr[a]['WeeklySummary'] = true;
}
如果你不知道这些属性

for(a in arr){
    for(e in arr[a]){
        !arr[a][e] ? arr[a][e] = true : null
    }
}
使用递归:

函数翻转(o){
用于(对象的k.键(o)){
if(对象的类型){
翻转(o[k])
}
如果(o[k]==false){
o[k]=正确;
}
}
}
常数o={
“介绍”:{
“瞬间”:假,
“每日”:假,
“周刊摘要”:错,
“ContentTypeId”:5
},
“条款”:{
“瞬间”:真的,
“每日”:假,
《周刊摘要》:没错,
“ContentTypeId”:1
},
“博客”:{
“瞬间”:真的,
“每日”:假,
《周刊摘要》:没错,
“ContentTypeId”:61
},
“新闻简报”:{
“瞬间”:假,
“每日”:假,
“周刊摘要”:错,
“ContentTypeId”:2
},
“特殊灯光”:{
“瞬间”:假,
“每日”:假,
“周刊摘要”:错,
“ContentTypeId”:50
}
}
翻转(o);

控制台日志(o)根据您的ES版本和所需的浏览器支持,这里有几种不同的方法

var数据={
“介绍”:{
“瞬间”:假,
“每日”:假,
“周刊摘要”:错,
“ContentTypeId”:5
},
“条款”:{
“瞬间”:真的,
“每日”:假,
《周刊摘要》:没错,
“ContentTypeId”:1
},
“博客”:{
“瞬间”:真的,
“每日”:假,
《周刊摘要》:没错,
“ContentTypeId”:61
},
“新闻简报”:{
“瞬间”:假,
“每日”:假,
“周刊摘要”:错,
“ContentTypeId”:2
},
“特殊灯光”:{
“瞬间”:假,
“每日”:假,
“周刊摘要”:错,
“ContentTypeId”:50
}
};
/*ES5*/
var outterKeys=Object.keys(数据);
对于(var o=0;o{
Object.key(数据[o]).forEach((i)=>{
如果(!数据[o][i]){
数据[o][i]=真
}
})
});

console.log('es6',数据)您也可以简单地使用嵌套的forEach来执行此操作,如下所示-

const a={
“介绍”:{
“瞬间”:假,
“每日”:假,
“周刊摘要”:错,
“ContentTypeId”:5
},
“条款”:{
“瞬间”:真的,
“每日”:假,
《周刊摘要》:没错,
“ContentTypeId”:1
},
“博客”:{
“瞬间”:真的,
“每日”:假,
《周刊摘要》:没错,
“ContentTypeId”:61
},
“新闻简报”:{
“瞬间”:假,
“每日”:假,
“周刊摘要”:错,
“ContentTypeId”:2
},
“特殊灯光”:{
“瞬间”:假,
“每日”:假,
“周刊摘要”:错,
“ContentTypeId”:50
}
}
Object.keys(a.forEach)(ele=>{
Object.keys(a[ele]).forEach(childEle=>{a[ele][childEle]=true});
})

控制台日志(a)@silencedogood我不这么认为,如果是那样的话,结果会是一样的。我真的不明白你想做什么?为了得到答案,你能再解释一下吗。
consttruthify=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̵集true@silencedogood嗨,如果解释不清楚,很抱歉。我要做的是将数组中每个对象内部的所有值都更改为false。例如,“Presentations”对象下当前为false的所有属性都将更改为true。其他物体也是如此。我遇到的问题是,我不知道如何达到“第二级”,也就是说,目前我的代码只是将键名更改为false,而不是每个对象本身的属性。这里没有数组。您有一个对象,其中包含对象。这是一个非常重要的区别,因为数组的属性和方法与对象不同。