3

I have an array of arrays of objects as below which is generated by _.filter lodash function which returns objects for the matched values:

const matchedPositions = _.filter(allPositions, function(o) {
return o.company.toLowerCase() === value.toLowerCase();
});//matchedPositions have array of objects
let allCheckboxFiltered = [...allCheckboxFiltered, matchedPositions]; //allCheckboxFiltered  have below results

   [
    [{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
    {serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"}],
    [{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
    {serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
    {serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"}]
    ];

I wanted as below intended result;

[
{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"}
];

I have tried reduce function to generate such intended result as below:

let result = temp1.reduce(function(res, obj) {
console.log(res, obj);
Object.keys(obj).forEach(function(k) {
res[k] = res[k] || [];
res[k] = res[k].concat(obj[k]);
});
return res;
}, []);

Above code is not generating the result, I wanted. I have tried other stuffs e.g. lodash functions as well but all in vain.

Thanks

1
  • 1
    How did you get the first array? Can't you change it at the source? Commented Dec 8, 2017 at 10:33

6 Answers 6

4

Why dont you just use lodash flatten https://lodash.com/docs/4.17.4#flatten

Sign up to request clarification or add additional context in comments.

Comments

3

You can use reduce

var output = temp1.reduce( (a,b) => (a = a.concat(b), a) ,[] ) ;

Or simply

var output = temp1.reduce( (a,b) => a.concat(b) ,[] ) ;

Comments

2

You can use reduce like below:

var temp1 = [
[{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"}],
[{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"}]
];

var result= temp1.reduce((o, m) => m.concat(o), []);
console.log(result);

In case you want to play with more ES6 features:

var temp1 = [
[{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"}],
[{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"}]
];

var result= temp1.reduce((o, m) => [...m, ...o], []);
console.log(result);

Comments

1

Use Lodash Library _.flattenDeep

let allCheckboxFiltered = [
    [{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
    {serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"}],
    [{serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
    {serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"},
    {serialNo: 9, sector: null, company: "AMERICAN LIFE INSURANCE COMPANY", location: null, position: "INSURANCE Operations  MANAGER"}]
    ];

allCheckboxFiltered = _.flattenDeep(allCheckboxFiltered);

Comments

0

You can use Array.concat in order to spread the inner array.

var temp1 = [
  [{
      serialNo: 9,
      sector: null,
      company: "AMERICAN LIFE INSURANCE COMPANY",
      location: null,
      position: "INSURANCE Operations  MANAGER"
    },
    {
      serialNo: 9,
      sector: null,
      company: "AMERICAN LIFE INSURANCE COMPANY",
      location: null,
      position: "INSURANCE Operations  MANAGER"
    }
  ],
  [{
      serialNo: 9,
      sector: null,
      company: "AMERICAN LIFE INSURANCE COMPANY",
      location: null,
      position: "INSURANCE Operations  MANAGER"
    },
    {
      serialNo: 9,
      sector: null,
      company: "AMERICAN LIFE INSURANCE COMPANY",
      location: null,
      position: "INSURANCE Operations  MANAGER"
    },
    {
      serialNo: 9,
      sector: null,
      company: "AMERICAN LIFE INSURANCE COMPANY",
      location: null,
      position: "INSURANCE Operations  MANAGER"
    }
  ]
];

const result = temp1.reduce((res, currentArr) => res.concat(currentArr), [])
console.log(result);

Comments

0

Just use below Lodash function

_.flattenDeep(temp1);

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.