var arr = ["cat","dog","chicken","pig"].map(function(item,i,arr) {
return arr.map(function(_item) { if( item != _item) return [item, _item];});
});
这将返回预期的结果。有一些警告,它在没有 shims 的旧浏览器中不起作用。
此外,重复值是“未定义”,而不是 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;
});
数组拼接方法 - 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;
});