JS组装元素集

时间:2017-05-04 14:49:45

标签: javascript arrays object

我有这样的元素:

[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),这意味着一个包含所有元素的数组。那个类别。 你会如何设计整个东西?你有控制权。 请查看示例代码(完全正确且功能正常)。

0 个答案:

没有答案