После выравнивания массива с помощью Lodash, как выбрать только объекты - PullRequest
0 голосов
/ 04 января 2019

Я сгладил этот массив с помощью lodash _.flatten и использовал редуктор для выбора типа объекта. Любой лучший способ для этого использовать lodash.

sampleData = [ ["x", { "name" : "sam", "age": "20"}], ["y", { "name" : "andey", "age" : "26"}] , ["z", { "name" : "jon", "age" : "24"}]];
flattenData(sampleData ) {
    return _.flatten(sampleData ).reduce((flattenedArray, indexValue) => {
    typeof (indexValue) === 'object' ? flattenedArray.push(indexValue) : '';
    return flattenedArray;
    }, []);
} 

После сглаживания этих данных нужно вытащить Объекты. Любое предложение с использованием lodash?

Выходной массив:

 [{ "name" : "sam", "age": "20"}, { "name" : "andey", "age" : "26"}, { "name" : "jon", "age" : "24"}]

Ответы [ 4 ]

0 голосов
/ 04 января 2019

Используйте _.flatMap() для выравнивания элементов с _.last() в качестве итерируемого:

const data = [ ["x", { "name" : "sam", "age": "20"}], ["y", { "name" : "andey", "age" : "26"}] , ["z", { "name" : "jon", "age" : "24"}]];

const result = _.flatMap(data, _.last);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>

Или собственный js Array.flatMap() (не поддерживается IE и Edge):

const data = [ ["x", { "name" : "sam", "age": "20"}], ["y", { "name" : "andey", "age" : "26"}] , ["z", { "name" : "jon", "age" : "24"}]];

const result = data.flatMap(([, o]) => o);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
0 голосов
/ 04 января 2019

использовать простой синтаксис es6

уменьшите размер вашего пакета: -)

const sampleData = [ ["x", { "name" : "sam", "age": "20"}], ["y", { "name" : "andey", "age" : "26"}] , ["z", { "name" : "jon", "age" : "24"}]];

const flattenedArray = [].concat(...sampleData).filter(e=>typeof(e)==='object');  
console.log(flattenedArray)
0 голосов
/ 04 января 2019

Кроме того, вы можете выполнить итерацию каждого массива и добавить объект в накопитель массива.

let sampleData = [ ["x", { "name" : "sam", "age": "20"}], ["y", { "name" : "andey", "age" : "26"}] , ["z", { "name" : "jon", "age" : "24"}]],
    result = sampleData.reduce((r, a) => {
      a.forEach(o => o === Object(o) && r.push({...o}));
      return r;
    },[]);
console.log(result);
0 голосов
/ 04 января 2019

Вы можете использовать методы _.filter и _.isObject только для возврата массива объектов.

С _.chain методом const res = _.chain(data).flatten().filter(_.isObject).value()

const data = [ ["x", { "name" : "sam", "age": "20"}], ["y", { "name" : "andey", "age" : "26"}] , ["z", { "name" : "jon", "age" : "24"}]];
const res = _.filter(_.flatten(data), _.isObject)
console.log(res)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
...