列出 Javascript 中的顺序子集元素
List sequential subset elements in Javascript
我有一个Array a = [0,1,2,3,4,5,6]
我想用 3 个元素进行子集化,所以结果变成这样:
[0,1,2],[1,2,3],[2,3,4],[3,4,5],[4,5,6]
我尝试使用我发现的这个脚本:
Array.prototype.combinate = function( iItems, aIn ) {
if (!aIn) {
var aIn = new Array();
this.combinate.aResult = new Array();
}
for(var i = 0; i < this.length; i++) {
var a = aIn.concat(this[i]);
var aRest = this.concat(); // Concat with nothing to create copy
aRest.splice(0, i + 1);
if(iItems && iItems - 1 <= aRest.length) {
aRest.combinate(iItems - 1, a);
if(iItems == 1) this.combinate.aResult.push(a);
}
}
return this.combinate.aResult;
}
但这给出了所有可能的子集(并且当列表变大并且搜索子集很小时很容易变慢) - 我只需要如上所示的 "sequential" 子集 - 所以像 [1,2,3]
可以 - 但不能 [1,2,4]
..
那里有知道如何在 JavaScript 中做到这一点的聪明人吗?
试试这个:
for (var i = 0; i < arr.length - 2; i++) {
var combination = new Array(arr[i], arr[i + 1], arr[i + 2]);
// or this
// var combination = [arr[i], arr[i + 1], arr[i + 2]];
// do something with the new array ??
}
假设有问题的数组不需要首先以某种方式排序,我会这样做:
function combinate(arr) {
var results = [];
if (arr.length >= 3) {
for (var i = 0; i < arr.length - 2; i++) {
var slice = arr.slice(i, i + 3);
results.push(slice);
}
}
return results;
}
作为补充说明,我建议不要将这样的东西作为方法添加到数组原型中。如果您出于某种原因需要这样做,没有什么能阻止您这样做,但我会避免这样做。
我有一个Array a = [0,1,2,3,4,5,6]
我想用 3 个元素进行子集化,所以结果变成这样:
[0,1,2],[1,2,3],[2,3,4],[3,4,5],[4,5,6]
我尝试使用我发现的这个脚本:
Array.prototype.combinate = function( iItems, aIn ) {
if (!aIn) {
var aIn = new Array();
this.combinate.aResult = new Array();
}
for(var i = 0; i < this.length; i++) {
var a = aIn.concat(this[i]);
var aRest = this.concat(); // Concat with nothing to create copy
aRest.splice(0, i + 1);
if(iItems && iItems - 1 <= aRest.length) {
aRest.combinate(iItems - 1, a);
if(iItems == 1) this.combinate.aResult.push(a);
}
}
return this.combinate.aResult;
}
但这给出了所有可能的子集(并且当列表变大并且搜索子集很小时很容易变慢) - 我只需要如上所示的 "sequential" 子集 - 所以像 [1,2,3]
可以 - 但不能 [1,2,4]
..
那里有知道如何在 JavaScript 中做到这一点的聪明人吗?
试试这个:
for (var i = 0; i < arr.length - 2; i++) {
var combination = new Array(arr[i], arr[i + 1], arr[i + 2]);
// or this
// var combination = [arr[i], arr[i + 1], arr[i + 2]];
// do something with the new array ??
}
假设有问题的数组不需要首先以某种方式排序,我会这样做:
function combinate(arr) {
var results = [];
if (arr.length >= 3) {
for (var i = 0; i < arr.length - 2; i++) {
var slice = arr.slice(i, i + 3);
results.push(slice);
}
}
return results;
}
作为补充说明,我建议不要将这样的东西作为方法添加到数组原型中。如果您出于某种原因需要这样做,没有什么能阻止您这样做,但我会避免这样做。