DevCentral
DevCentral

Reputation: 1159

Javascript - compare boolean arrays and creating a new one

I'm curious how I could compare these array's, bare in mind this is an example, it's not limited to 4 array's, as this could be more or less depending on user selection)

let array0 = [false,true,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,true ,true ,false,false,false,false,false,false,false,false,true ,true ,true ,true,true,false,true,true,true,true,false,false]
let array1 = [true ,true,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,true ,true ,true ,true ,false,true ,false,true ,true ,false,true ,true ,true ,true ,true,true,true ,true,true,true,true,true ,true ]
let array2 = [true ,true,true ,true ,true ,true ,true ,true ,true,true ,true ,true ,true ,true ,true ,true ,true ,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true ,true,true,true,true,true ,true ]
let array3 = [true ,true,true ,true ,true ,true ,true ,true ,true,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true,true,true ,true,true,true,true,true ,true ]

The end goal is to get a new array with a true or false value based on comparison/validation of all of the above array's, a true value should only be set if all 4 array's have a true value in that index position, and a false if of them or not for example:

Array result Array result Array result
array0[0] false array0[1] true array0[2] false
array1[0] true array1[1] true array1[2] false
array2[0] true array2[1] true array2[2] true
array3[0] true array3[1] true array3[2] false
result false true false
let resultArray = [false, true, false, false, /* etc */]

Hope I have explained this correctly.

Upvotes: 0

Views: 64

Answers (4)

Nina Scholz
Nina Scholz

Reputation: 386746

You could transpose the array and map all items having truthy values.

const
    array0 = [false, true, false, true, true],
    array1 = [true, true, false, false, true],
    array2 = [false, true, true, false, true],
    array3 = [true, true, true, true, true],
    transpose = (r, a) => a.map((v, i) => [...(r[i] || []), v]),
    result = [array0, array1, array2, array3]
        .reduce(transpose, [])
        .map(a => a.every(Boolean))

console.log(result);

Upvotes: 2

Peterrabbit
Peterrabbit

Reputation: 2247

Since all your arrays have same length I guess you could simply do that:

let array0 = [false, true, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, true, true, true, true, true, false, true, true, true, true, false, false]
let array1 = [true, true, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, true, true, true, true, false, true, false, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true]
let array2 = [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true]
let array3 = [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]

let result = Array.from({
  length: array0.length
}).map((_, i) => array0[i] && array1[i] && array2[i] && array3[i])

console.log(result)

Upvotes: 1

Alan Omar
Alan Omar

Reputation: 4227

let array0 = [false, true, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, true, true, true, true, true, false, true, true, true, true, false, false]
let array1 = [true, true, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, true, true, true, true, false, true, false, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true]
let array2 = [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true]
let array3 = [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]

let MAX_INDEX = Math.max(array0.length, array1.length, array2.length, array3.length)

let result = []

for (let i = 0; i < MAX_INDEX; i++) {
  result[i] = array0[i] || false &&
    array1[i] || false &&
    array2[i] || false &&
    array3[i] || false
}

console.log(result)

Upvotes: 1

Tushar Shahi
Tushar Shahi

Reputation: 20626

I think you should create an array containing all your arrays. Then you will probably need a double for loop to calculate individual values. Check the nth index for every array and compute the value, where i is from 0 to the length of array (Basically, do the check for all the indices). You should get your computed result. Below is using only 2 arrays:

let array0 = [false,true,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,false,true,true,true,true,false,false]
let array1 = [true,true,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,true,true,true,true,false,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true]
let newArr = [array0,array1];
let ans = [];

for(let i = 0 ; i < array1.length; i++){
  let val = true;
  for(let j = 0 ;j < newArr.length; j++){
      val = val && newArr[j][i];
      if(!val) break;
  }
ans.push(val);
}
console.log(ans);

Upvotes: 1

Related Questions