在记录集中查找唯一值

时间:2018-12-18 05:54:28

标签: javascript

可以说我有一个邮政编码列表。这只是您了解我要问的一个例子。

邮政编码= [53081,53083,54935,53711,54935,53081,57322,53083,53711];

如何仅在数组中循环一次以仅将唯一的邮政编码作为HTML列表输出? (53081,53083,54935,53711,53722)

下面的我的代码从另一个文件打开一个记录集,但不知道有多少个唯一的邮政编码。我将其输出到所有这些位置。

我只想将唯一的邮政编码作为HTML列表输出。

function zips() {
    "use strict";

    var zipCodeRecords;
    var zipCode;
    var uniqueZips;
    var output;

    uniqueZips = "";

    // get the HTML output tag to add list
    output = document.getElementById("outputDiv");

    // open zipcode records
    zipCodeRecords = openZipCodeStudyRecordSet();

    while(zipCodeRecords.readNextRecord()) {
        zipCode = zipCodeRecords.getSampleZipCode();

        uniqueZips += "<li>" + zipCode + "</li>";
    }

    output.innerHTML = uniqueZips;

}

3 个答案:

答案 0 :(得分:1)

最快的方法是将每个元素添加为对象中的键。

如果多次定义相同的键,则不会增加键的数量(无重复)

var zipcodes = [53081, 53083, 54935, 53711, 54935, 53081, 57322, 53083, 53711];
var uinque = {};

zipcodes.map(function(z){ uinque[z]=z; });

console.log(Object.keys(uinque));

答案 1 :(得分:0)

您可以通过传递当前项目,索引和数组本身来使用filter()。然后,仅当当前项目的索引等于当前索引时才返回项目。

var zipcodes = [53081, 53083, 54935, 53711, 54935, 53081, 57322, 53083, 53711];

var res = zipcodes.filter((v, idx, arr) => arr.indexOf(v) === idx);
console.log(res);

答案 2 :(得分:0)

function zips() {
    "use strict";

    var zipCodeRecords;
    var zipCode;
    var uniqueZips;
    var output;

    uniqueZips = "";

    // get the HTML output tag to add list
    output = document.getElementById("outputDiv");

    // open zipcode records
    zipCodeRecords = openZipCodeStudyRecordSet();

    zipcodesList = [];
    while(zipCodeRecords.readNextRecord()) {
        zipCode = zipCodeRecords.getSampleZipCode();
   if(zipcodesList.indexOf(zipCode )== -1){
        zipcodesList [] = zipCode
        uniqueZips += "<li>" + zipCode + "</li>";
      }

    }

    output.innerHTML = uniqueZips;

}

//这应该有帮助