如何在删除每个元素后获取数组元素的所有组合

时间:2018-02-10 12:40:44

标签: javascript arrays algorithm

我希望在删除每个元素后获取所有数组元素的所有组合

例如:

输入:[6,5,3,4]

输出应为:[[5,3,4],[6,3,4],[6,5,4],[6,5,3]]

不使用任何库

我在这段代码中工作但没有输出正确的结果



    var arrs = [[]];
    
    function doIt(arr) {
        for (var i = 0; i < arr.length; i++) {
            arrs[i] = arr.filter(function (item) {
                return item != i
            });
        }
    
        console.log(JSON.stringify(arrs));
    }
    
    doIt([4, 3, 1]);
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:1)

您可以通过迭代给定数组和映射数组而不使用外部索引的元素来使用嵌套方法。

&#13;
&#13;
var array = [6, 5, 3, 4],
    result = array.map((_, i) => array.filter((_, j) => i !== j));

console.log(result);
&#13;
&#13;
&#13;

在您的代码中,您需要检查过滤器回调的索引而不是值。

&#13;
&#13;
var arrs = [[]];

function doIt(arr) {
    for (var i = 0; i < arr.length; i++) {
        arrs[i] = arr.filter(function (item, j) {
        //                                   ^ use index instead of value
            return j != i;
            //     ^                           here                
        });
    }
    console.log(arrs);
}
doIt([4, 3, 1]);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

简单forEach + filter

只需比较索引即可过滤下一个元素。

&#13;
&#13;
var result = [];
var array = [6,5,3,4];
array.forEach((_, i) => result.push(array.filter((_, j) => i !== j)));

console.log(result);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

不需要复杂,它实际上是一个简单的算法。

var input = [6,5,3,4];
var output = [];
for (i = 0; i < input.length; ++i) {
   temp = [];
   for (j = 0 ; j < input.length; ++j) {
      if (i != j)
          temp.push(input[j]);
   }
   output.push(temp);
}
console.log(output);