Как я могу установить все свойства массива объектов в true? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть некоторые данные JSON, которые я пытаюсь отобразить и установить для всех свойств значение true.

Я знаю, что вы можете использовать для этого функцию карты, однако способ установки JSONвверх, у каждого из объектов в массиве есть имя ключа.

Поэтому, когда я запускаю функцию карты, он устанавливает для всех имен ключей значение 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
    }
}

Вот функция карты, которую я пробовал, где data относится к JSON выше:

Object.entries(data).map(([key, value]) => {
     return value === true;
});

Это, в свою очередь, возвращаетмассив из пяти элементов со значением false:

[false,false,false,false,false]

То, что я пытаюсь сделать, это перевернуть значения любых элементов, которые ложны к истине.

Ответы [ 4 ]

1 голос
/ 24 сентября 2019

Вы можете просто сделать это, используя вложенный forEach, например, -

    const a = {
      "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
    }
}
    
    Object.keys(a).forEach(ele => {
    	Object.keys(a[ele]).forEach(childEle => {a[ele][childEle] = true});
    })
    
    console.log(a);
0 голосов
/ 24 сентября 2019

использовать рекурсию:

function flip(o) {
  for (k of Object.keys(o)) {
    if (typeof o[k] === "object") {
      flip(o[k])
    }
    if (o[k] === false) {
      o[k] = true;
    }
  }
}



const o = {
    "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
    }
}

flip(o);
console.log(o);
0 голосов
/ 24 сентября 2019

Вот несколько способов сделать это в зависимости от версии ES и требуемой поддержки браузера.

var data = {
    "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
    }
};

/* ES5 */
var outterKeys = Object.keys(data);
for(var o = 0; o < outterKeys.length; o++){
  var outterObject = data[outterKeys[o]];
  var innerKeys = Object.keys(outterObject);
  for(var i = 0; i < innerKeys.length; i++){
    var innerObject = outterObject[innerKeys[i]];
    if (!innerObject){
      data[outterKeys[o]][innerKeys[i]] = true;
    }
  }
}

console.log('es5', data);

/* ES6 */
data = {
    "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
    }
};

Object.keys(data).forEach((o) => {
  Object.keys(data[o]).forEach((i) => {
    if (!data[o][i]){
      data[o][i] = true
    }
  })
});
console.log('es6', data);
0 голосов
/ 24 сентября 2019

вам не нужно ничего сопоставлять

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
    }
}
...