Как сделать массив из нескольких вложенных объектов? - PullRequest
6 голосов
/ 11 мая 2019

У меня есть такой объект.

let Filus = {
     male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

Я хочу получить этот массив из этого объекта.

let Filus = [1,2,3,4,5];

Как это сделать?

Ответы [ 4 ]

6 голосов
/ 11 мая 2019

Вы можете получить значения вложенного объекта male, используя Object.values(), а затем использовать flat()

let Filus = { male : { hat: [1], jacket: [2], pants: [3], shoes: [4], suit: [5] } };

const res = Object.values(Filus.male).flat();
console.log(res)

Вы также можете сделать это без flat(), используя concat() и оператор распространения.

let Filus = { male : { hat: [1], jacket: [2], pants: [3], shoes: [4], suit: [5] } };

const res = [].concat(...Object.values(Filus.male));
console.log(res)
5 голосов
/ 11 мая 2019

Просто используйте Object.values и flat - это работает, даже если вы не знаете ключ вложенного объекта:

let Filus = {
  male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

const res = Object.values(Object.values(Filus)[0]).flat();
console.log(res);

Синтаксис ES5:

var Filus = {
  male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

var res = Object.keys(Filus[Object.keys(Filus)[0]]).map(function(key) { 
  return Filus[Object.keys(Filus)[0]][key];
}).reduce(function(acc, curr) {
  return acc.concat(curr);
});

console.log(res);

Это также легко, если у вас есть ключ:

let Filus = {
  male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

const res = Object.values(Filus.male).flat();
console.log(res);

Синтаксис ES5:

var Filus = {
  male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

var res = Object.keys(Filus.male).map(function(key) { 
  return Filus.male[key];
}).reduce(function(acc, curr) {
  return acc.concat(curr);
});

console.log(res);
2 голосов
/ 11 мая 2019

Вы можете взять Generator и вернуть все найденные значения объекта и его вложенных объектов.

Этот подход основывается на языковом порядке объектов.

function* values(o) {
    if (o && typeof o === 'object') for (let v of Object.values(o)) yield* values(v);
    else yield o;
} 

let filus = { male: { hat: [1], jacket: [2], pants: [3], shoes: [4], suit: [5] } },
    result = [...values(filus)];

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
1 голос
/ 11 мая 2019

Если объект из строки JSON, числа могут быть извлечены во время синтаксического анализа:

var arr = [], json = '{"male":{"hat":[1],"jacket":[2],"pants":[3],"shoes":[4],"suit":[5]}}'

JSON.parse(json, (k, v) => v.toFixed && arr.push(v))

console.log(arr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...