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库中有类似的方法或功能吗?或者我只需要用嵌套循环以丑陋的方式自己编写它?
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的数组.我确信有一个更优雅的方法来处理它.
这将为您提供正确的成对组合.
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)
这是相同代码的更易读的版本.
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)