javascript数组中条目的成对组合

foz*_*eat 5 javascript arrays combinations

我在javascript中给出了一系列条目,例如:

var entries = ["cat", "dog", "chicken", "pig"];
Run Code Online (Sandbox Code Playgroud)

我现在想迭代它们的所有独特的成对组合.在这个例子中,我想看到:

("cat", "dog"),
("cat", "chicken"),
...
Run Code Online (Sandbox Code Playgroud)

在其他语言中,如scala,这非常简单.你这样做

entries.combinations(2)
Run Code Online (Sandbox Code Playgroud)

javascript库中有类似的方法或功能吗?或者我只需要用嵌套循环以丑陋的方式自己编写它?

rle*_*mon 5

var arr = ["cat","dog","chicken","pig"].map(function(item,i,arr) {
    return arr.map(function(_item) { if( item != _item) return [item, _item];});
});
Run Code Online (Sandbox Code Playgroud)

这将返回预期的结果.有一些警告,它在没有垫片的旧浏览器中不起作用.

重复值也是'undefined',而不是4个3的数组.我确信有一个更优雅的方法来处理它.

Array.prototype.map() - MDN

编辑

这将为您提供正确的成对组合.

var arr = ["cat","dog","chicken","pig"].map(function(item,i,arr) {
    var tmp = arr.map(function(_item) { if( item != _item) return [item, _item];});
    return tmp.splice(tmp.indexOf(undefined),1), tmp;
});
Run Code Online (Sandbox Code Playgroud)

阵列拼接方法 - MDN

这是相同代码的更易读的版本.

var myArray = ["cat", "dog", "chicken", "pig"];
var pairwise = myArray.map(function(item, index, originalArray) {
    var tmp = originalArray.map(function(_item) {
        if (item != _item) {
            return [item, _item];
        }
    });
    tmp.splice(tmp.indexOf(undefined), 1); // because there is now one undefined index we must remove it.
    return tmp;
});
Run Code Online (Sandbox Code Playgroud)


yve*_*ine 3

据我所知还没有。我认为你必须坚持嵌套循环。

这里已经提出了类似的问题:使用 javascript 输出数字数组的每个组合也许您可以在那里找到答案。