JQuery从数组中删除重复项,其中string包含相同的文本

时间:2016-10-12 20:26:35

标签: javascript jquery arrays

我有一个包含X个项目的数组。每个都有由管道字符分隔的变量。在循环中,我可以在管道上拆分以获得第二个项目;但我如何拼接以删除副本。

"Sometext|22621086|address|333629dc87894a7ea7df5291fa6d1836|PC_E|1803"
"Sometext2|22622138|working|d3e70175ffe942568cd21f1cf96f4d63|PC_E|1803"
"Sometext3|22622138|working|851946e6325445da99c113951590f714|PC_E|1803"

结果应该是这样。

"Sometext|22621086|address|333629dc87894a7ea7df5291fa6d1836|PC_E|1803"
"Sometext2|22622138|working|d3e70175ffe942568cd21f1cf96f4d63|PC_E|1803"

请注意,副本22622138是一个随机数,因此解决方案需要适用于此位置中的任何数字(它始终位于arr [1]位置)。

这就是我的尝试:

$.each(arr_transcript, function (i, e) {
            if (e.length != 0) {
                var arr = e.split("|")
                var i = arr_transcript.indexOf(arr[1]);
                if (i != -1) {
                    arr_transcript.splice(i, 1);
                }
            }
        });

2 个答案:

答案 0 :(得分:3)

这是一个通用函数:

function uniqBy(a, key) {
    let seen = new Set();
    return a.filter(item => {
        let k = key(item);
        return !seen.has(k) && seen.add(k);
    });
};

var data = [
    "Sometext|22621086|address|333629dc87894a7ea7df5291fa6d1836|PC_E|1803",
    "Sometext2|22622138|working|d3e70175ffe942568cd21f1cf96f4d63|PC_E|1803",
    "Sometext3|22622138|working|851946e6325445da99c113951590f714|PC_E|1803"
];

var result = uniqBy(data, item => item.split('|')[1]);

console.log(result)

有关详细信息,请参阅here

答案 1 :(得分:2)

创建要检查的数字的地图,然后根据该

进行过滤

var arr_transcript = [
    "Sometext|22621086|address|333629dc87894a7ea7df5291fa6d1836|PC_E|1803",
    "Sometext2|22622138|working|d3e70175ffe942568cd21f1cf96f4d63|PC_E|1803",
    "Sometext3|22622138|working|851946e6325445da99c113951590f714|PC_E|1803"
];

var map = arr_transcript.map(function(text) { 
    return text.split('|')[1];
});

var filtered = arr_transcript.filter(function(item, index) {
    return index === map.lastIndexOf( map[index] );
});

console.log(filtered)