Goodnight. There is a multidimensional array arr[[],[],[]] consisting of false and true , tell me by what method to get the number true in the array?
- cycles and recursion - Igor
- and can be more precise? - Artyom Sapsay
|
3 answers
As Igor said, cycles and recursion:
var ar = [ [true, false, true], [true, false, false], [true, false, true], [true, true, true], [false, false, true], [true, false], true, false, [true, false] ]; function calculate(array) { var res = { 'false': 0, 'true': 0 }; count(array); return res; function count(arr) { arr.forEach(e => { if (Array.isArray(e)) { count(e); } else { res['false'] += e ? 0 : 1; res['true'] += e ? 1 : 0; } }); }; }; console.log(calculate(ar)); |
Alternatively, using the .reduce function:
const countTrue = arrayOrElement => Array.isArray(arrayOrElement) ? arrayOrElement.reduce((number, element) => number + countTrue(element), 0) : (arrayOrElement ? 1 : 0); The same for counting arbitrary elements:
const countValues = (arrayOrElement, valueToCount) => Array.isArray(arrayOrElement) ? arrayOrElement.reduce((number, element) => number + countValues(element, valueToCount), 0) : (arrayOrElement === valueToCount ? 1 : 0); Snippet for both options:
let array = [ [true, false, true, false], [true, [false, [false, []]]], [[[[true]]]], [[[true], true], true], true, false, [[[[]]]] ]; const countTrue = arrayOrElement => Array.isArray(arrayOrElement) ? arrayOrElement.reduce((number, element) => number + countTrue(element), 0) : (arrayOrElement ? 1 : 0); console.log(countTrue(array)); const countValues = (arrayOrElement, valueToCount) => Array.isArray(arrayOrElement) ? arrayOrElement.reduce((number, element) => number + countValues(element, valueToCount), 0) : (arrayOrElement === valueToCount ? 1 : 0); console.log(countValues(array, false)); |
If you just need a quantity, you can do this:
var arr = [ [true, false, true], [true, false, false], [true, false, true], [true, true, true], [false, false, true], [true, false], true, false, [true, false] ]; let newArr = arr.join().split(','); let count = 0; for (let i = 0; i < newArr.length; i++) { if (newArr[i] == "true") { count++; } } console.log(count); |