Вывод элементов массива через if?
let mass = {
"a": {
c1: "aaaa",
c2: "bbbb",
c7: "ffff",
с4: "deeee"
},
"b": {
c1: "ccc",
c2: "dddd",
c10: "tttt",
с40: "deeee"
},
"c": {
c1: "ffff",
c2: "kkkk",
c7: "xxxx"
}
}
- Как сделать так, чтобы вывелись c1, c2 и c7? c1, c2 - обязательные во всех массивах, c7 - нет. чтобы вывести просто c1, c2,я могу перебрать через цикл. а что добавить, чтобы выводились только c1, c2 и c7? for (let k in mass)
то есть, чтобы я на выходе получил a: c1, c2, c7 b: c1, c2 c: c1, c2, c7
Как обратиться ко всем элементам, чтобы вывести абсолютно все содержимым массивов a,b,c?
a: c1, c2, c7, c4 b: c1, c2, c10, c40 c: c1, c2, c7
Ответы (2 шт):
Как сделать так, чтобы вывелись c1, c2 и c7 ?
Обращение к несуществующему ключу не выдает ошибку, а просто возвращает undefined, который в логическом контексте будет false. Поэтому в некоторых случаях можно обойтись проверкой
if ( obj.c7 ) { /*...*/ }
Подвох: Если такой ключ есть, но со значениями null, 0, "", NaN, undefined — это всё тоже false, поэтому есть вероятность, что какой-нибудь ключ {c7: 0} не пройдет проверку.
Наличие ключа в объекте можно проверить через объект.hasOwnProperty("ключ")
let obj = {
"a": {c1: "aaaa", c2: "bbbb", c7: "ffff"},
"b": {c1: "cccc", c2: "dddd", c9: "tttt"},
"c": {c1: "ffff", c2: "kkkk", c7: "xxxx"}
};
for( let key in obj ) {
let tmp = {};
tmp.c1 = obj[key].c1;
tmp.c2 = obj[key].c2;
if( obj[key].hasOwnProperty('c7') ) {
tmp.c7 = obj[key].c7;
}
obj[key] = tmp;
}
console.log(obj);
Как вывести абсолютно все содержимое a,b,c?
Object.values() - возвращает массив, со всеми значениями переданного объекта.
let bubu = {
"a": {c1: "aaaa", c2: "bbbb", c7: "ffff"},
"b": {c1: "cccc", c2: "dddd", c9: "tttt"},
"c": {c1: "ffff", c2: "kkkk", c7: "xxxx"}
};
let arr = Object.values(bubu).map(Object.values).flat();
console.log(arr);
// console.log( Object.values(bubu) );
// console.log( Object.keys(bubu) );
В этом случае, values() возвращает такой массив:
[
{c1: "aaaa", c2: "bbbb", c7: "ffff"},
{c1: "cccc", c2: "dddd", c9: "tttt"},
{c1: "ffff", c2: "kkkk", c7: "xxxx"}
]
Array.prototype.map() - берет функцию, применяет её к кажому элементу массива и подменяет этот элемент на результат вызова функции. А результат вызова Object.values → массив со значениями ["aaaa","bbbb","ffff"] и т.п.
Приклажываю два котика
Первый выводит только с1, с2 и с7, если он имеется
const mass = {
a: {c1: 'aaaa', c2: 'bbbb', c7: 'ffff', с4: 'deeee'},
b: {c1: 'ccc', c2: 'dddd', c10: 'tttt', с40: 'deeee'},
c: {c1: 'ffff', c2: 'kkkk', c7: 'xxxx'}
};
let summ = '';
for(let one in mass){
summ += `${one}: ${mass[one].c1} ${mass[one].c2} ${mass[one].c7 ? mass[one].c7 : ''}\n`;
}
console.log(summ);
Второй котик - выводит все данные - всех объедков в главном объедке
const mass = {
a: {c1: 'aaaa', c2: 'bbbb', c7: 'ffff', с4: 'deeee'},
b: {c1: 'ccc', c2: 'dddd', c10: 'tttt', с40: 'deeee'},
c: {c1: 'ffff', c2: 'kkkk', c7: 'xxxx'}
};
let summ = '';
for(let one in mass){
let keys = Object.entries(mass[one]);
keys = keys.flatMap((e)=>e.join(': '));
summ += `${one}: [${keys.join(' | ')}]\n`;
}
console.log(summ);
Также попробуй это:
console.log(Object.values(mass).flatMap(Object.values)); // абсолютно всё содержимое