我有这样的元素:
[1, A. data]
[2, B, data]
[3, C, data]
[4, A, data]
[5, B, data]
[6, A, data]
或按类别划分
[1, A. data]
[4, A, data]
[6, A, data]
[2, B, data]
[5, B, data]
[3, C, data]
我想要一个包含A,A + B,A + C,A + B + C的数组。
两种方式:从所有元素开始并删除OR开始分离并加入:
var startArr =
[
[ 1, 'a', 'data'],
[ 2, 'b', 'data'],
[ 3, 'c', 'data'],
[ 4, 'a', 'data'],
[ 5, 'b', 'data'],
[ 6, 'a', 'data'],
[ 7, 'a', 'data'],
[ 8, 'c', 'data'],
[ 9, 'a', 'data']
];
//1.1 Filter
function checkCat(el) {
return el[1] != 'a';
}
newArr = startArr.filter(checkCat);
//1.2 Remove elements in reverse loop
var i;
for (i = startArr.length - 1; i >= 0; i -= 1) {
if (startArr[i][1] == 'b' || startArr[i][1] == 'c') {
startArr.splice(i, 1);
}
}
您怎么看?谢谢。
var startA = [
[ 1, 'a', 'data'],
[ 4, 'a', 'data'],
[ 6, 'a', 'data'],
[ 7, 'a', 'data'],
[ 9, 'a', 'data']
];
var startB = [
[ 2, 'b', 'data'],
[ 5, 'b', 'data']
]
var startC = [
[ 3, 'c', 'data'],
[ 8, 'c', 'data']
]
//2.1 Join and sort
arrMid = startA.concat(startC);
arrFinal = arrMid.sort(function(a, b){ return a[0]-b[0]});
//2.2 Find index and insert at it in a loop
function whereIsMyPlace(element) {
return element[0] >= val ;
}
function putInPlace(item, index) {
val = item[0];
myPlace = startA.findIndex(whereIsMyPlace);
startA.splice(myPlace, 0, item);
}
startB.forEach(putInPlace);
startC.forEach(putInPlace);
编辑:[1,A,数据],1 - id,A - 类别,数据=一些数据。
所以最后我想要一个包含所有类别元素的数组,如A或类别组合,如“A和B”,“A和C”或“A和B和C”。 (根据输入,每次都不同)。
该数组按ID号排序。
我的问题是我应该从一个数组中的所有元素开始,并删除我不需要的类别(示例1.1和1.2)。
或者执行oposite并从基于类别的数组中分组的元素开始,并通过添加必要的元素来创建最终数组(示例2.1和2.2)。
更明确吗?
想象一下,你必须编写一个应该采用一个参数的函数,并且能够输出所有可能的组合(A,A + B,A + C,A + B + C),这意味着一个包含所有元素的数组。那个类别。 你会如何设计整个东西?你有控制权。 请查看示例代码(完全正确且功能正常)。