配列がn
であると仮定します。これらの配列の各項目間で操作を行う簡単な方法はありますか?配列の項目間で操作を行う
例:2つの配列
arr1 = [true,false,false,true]
arr2 = [false,true,false,true]
私はAND
操作をしたいのですが:
期待される結果:
[false,false,false,true]
あなたは私にこれを行うためのいくつかのヒントを与えることはできますか?
配列がn
であると仮定します。これらの配列の各項目間で操作を行う簡単な方法はありますか?配列の項目間で操作を行う
例:2つの配列
arr1 = [true,false,false,true]
arr2 = [false,true,false,true]
私はAND
操作をしたいのですが:
期待される結果:
[false,false,false,true]
あなたは私にこれを行うためのいくつかのヒントを与えることはできますか?
これは、Array#reduce
と、[arr1, arr2, ...]
のような任意の長さの配列の提案です。
function and(array) {
return array.reduce(function (r, a) {
return r.map(function (b, i) {
return a[i] && b;
});
});
}
var arr1 = [true, false, false, true],
arr2 = [false, true, false, true],
result = and([arr1, arr2]);
console.log(result);
ES6
var and = array => array.reduce((r, a) => r.map((b, i) => a[i] && b)),
arr1 = [true, false, false, true],
arr2 = [false, true, false, true],
result = and([arr1, arr2]);
console.log(result);
arr1 = [true, false, false, true]
arr2 = [false, true, false, true];
var op = [];
arr1.forEach(function(item, i) {
op.push(item && arr2[i]);
});
console.log(op);
JavaScriptを使用Array#forEach
方法
var arr1 = [true, false, false, true],
arr2 = [false, true, false, true];
// put all arrays inside a single array
var arrs = [arr1, arr2];
// set result as initial array values
var res = arrs[0];
// iterate over remaining array
arrs.slice(1).forEach(function(v, i) {
// iterate over array values and apply logical and operation
arr1.forEach(function(item, i) {
res[0] = res[0] && arr2[i];
});
})
console.log(res);
var arrs = [
[...],
[...]
];
:
var arr1 = [true, true, false, true],
arr2 = [false, true, false, true],
arr3 = [false, true, false, false];
function combine(...arrs) {
// set result as first array
var res = arrs[0];
// iterate over remaining array
arrs.slice(1).forEach(function(v, i) {
// iterate over array values and apply logical and operation
arr1.forEach(function(item, i) {
res[0] = res[0] && arr2[i];
});
});
return res;
}
console.log(combine(arr1, arr2, arr3));
配列が50個の場合はどうなりますか? – Bob
@Bob:updated .. –
としてそれを定義しますループのみを使用:
var result = [];
for (var i = 0; i < arrs[0].length; i++) {
var value = arrs[0][i];
for (var j = 1; j < arrs.length; j++) {
value = value && arrs[j][i];
}
results.push(value);
}
i
カウンタが最初の配列は水平に、j
カウンタが垂直あなたNアレイを横切る横断します。
これは私の解決策になる...あなたは、あなたの操作を保持し、内部でそれをスローするようにコールバックを定義することができますマップファンクタ。最初のスニペットはあなたの質問を表示し答えます.2番目のスニペットは一般的に答えを出します。
var arrs = [[true,false,false,true,true,true],[false,true,false,true,true,true],[false,true,true,true,true,false]],
result = arrs.reduce((p,c) => p.map((e,i) => e && c[i]));
console.log(result);
var arrs = [[true,false,false,true,true,true],[false,true,false,true,true,true],[false,true,true,true,true,false]],
crashemall = (ar,cb) => ar.reduce((p,c) => p.map((e,i) => cb(e,c[i]))),
cb1 = (a,b) => a || b,
cb2 = (a,b) => !a && b
result1 = crashemall(arrs,cb1),
result2 = crashemall(arrs,cb2);
console.log(result1);
console.log(result2);
使用[ '.MAP()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)または 'for'ループ?何を試しましたか? – nnnnnn