JS:从数组中的特定字符串中删除重复值

时间:2014-01-03 12:54:37

标签: javascript arrays

这是我的数组列表:

['<h3>Goalkeepers</h3><a href="#" data-id="44">Lewis Cardiff City &pound;4.00</a>',
'<h3>Goalkeepers</h3><a href="#" data-id="42">Given Aston Villa &pound;4.00</a>',
'<h3>Goalkeepers</h3><a href="#" data-id="36">Robles Everton &pound;4.30</a>']

我想删除仅包含'<h3></h3>'个标记的重复值。

我的期望是这样的:

['<h3>Goalkeepers</h3><a href="#" data-id="44">Lewis Cardiff City &pound;4.00</a>',
'<a href="#" data-id="42">Given Aston Villa &pound;4.00</a>',
'<a href="#" data-id="36">Robles Everton &pound;4.30</a>']

尝试.reduce,.map,.filter方法来解决这个问题。但没有运气。 有人请帮帮我。

谢谢!

2 个答案:

答案 0 :(得分:1)

快速回答:

    function removeDuplicates(a) {
        var first = null;
        return a.map(function(item) {
            var h3 = item.match(/^<h3>([^<]+)<\/h3>/);
            if(first && first === h3[1]) return item.slice(h3[0].length);
            else {
                first = h3[1];
                return item;
            }
        });   
    }

检查http://jsfiddle.net/WA8DE/。 你可以看到一个有趣的副作用(在浏览器的控制台中) - 代码将删除数组中的任何后续重复(“Shoplifters”)。

但请注意,这不是构建和处理数据的最佳方式。 让它像这样结构会更方便:

    var data = {
        Goalkeepers: [
            {url: '#', id: 44, name: "Lewis Cardiff City", bribe: 4.00},
            {url: '#', id: 42, name: "Given Aston Villa", bribe: 4.00},
            {url: '#', id: 46, name: "Robles Everton", bribe: 4.00},
        ],
        Shoplifters: [
            // ...
        ],
        // etc.
    };

这可以作为JSON从您的服务器检索,并且几乎直接在JSON.parse()的帮助下使用。您还可以从任何其他数据生成此类结构。

然后,在必须在您的网页上呈现HTML时生成HTML。类似的东西:

    function dataToHTML(d) {
        var out = "";
        for(var section in data) {
            if(!data.hasOwnProperty(section)) continue;
            out += "<h3>" + section + "</h3>";
            out += data[section].map(function(item){
                return "<a href=\"" + item.url + "\" data-id=\"" + item.id + "\">" + item.name + " &pound;" + item.bribe + "</a>";
            }).join('');
        }
        return out;
    }

    dataToHTML(data); // -> HTML string

但是,这看起来几乎就像一个粗糙的模板,所以你可能需要更优雅的东西,比如下划线模板:http://underscorejs.org/#template

使用数据编程,而不是字符串;)

答案 1 :(得分:0)

简单方法

const arr = ["red","pink","pink","green","yellow","red","blue",];
console.log([...new Set(arr)]);