创建数组,使用$ .each循环,如果不在数组中则添加值

时间:2014-03-24 19:01:55

标签: javascript jquery arrays push each

我在文本中有一堆.defined并希望使用javascript创建一个唯一值数组。所以基本上,对于每个定义了类的锚,我想首先检查数组以查看该对是否已经存在。如果存在,请转到下一个锚点。如果不存在,请添加到数组。这是我尝试使用的代码,但它不会删除重复的值。

var arr = new Array();
y = 0;
$("a.defined").each(function() {
var spanishWord = this.text;
var englishWord = this.title;
if(spanishWord in arr) {
    console.log("do nothing");
} else {
    arr.push({key: spanishWord, value: englishWord});
    y++;
}

例如,我在文中有这些标记:

<a title="read">Leer</a>
<a title="work">Trabajar</a>
<a title="like">Gustar</a>
<a title="read">Leer</a>
<a title="sing">Cantar</a>
<a title="like">Gustar</a>

我希望我的阵列看起来像:

Spanish Word  |   English Word
Leer               read
Trabajar           work
Gustar              like
Cantar              sing

但它看起来像:

Spanish Word  |   English Word
Leer               read
Trabajar           work
Gustar              like
Leer                read
Cantar              sing
Gustar              like

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

我会分两步执行此操作..一个用于消除重复,另一个用于创建数组:

http://jsfiddle.net/uN4js/

var obj = {};
$('a.defined').each(function() {
     obj[this.text] = this.title;
});

var arr = [];
for (var prop in obj) {
    if (obj.hasOwnProperty(prop))    
        arr.push({key: prop, value: obj[prop]});
};

console.log(arr);

如果对象足够并且您不需要数组,则可以在创建对象后停止。

答案 1 :(得分:1)

你可以在这里使用javascript对象:

var dict = {};
y = 0;
$("a.defined").each(function() {
    var spanishWord = this.text;
    var englishWord = this.title;
    dict[spanishWord] = englishWord;
}

并不需要进行独特的检查,因为较新的值只会覆盖较旧的值。如果您不想要这种行为,可以这样做:

var dict = {};
y = 0;
$("a.defined").each(function() {
    var spanishWord = this.text;
    var englishWord = this.title;
    if (!(spanishWOrd in dict)) {
        dict[spanishWord] = englishWord;
    }
}

答案 2 :(得分:1)

Javascript&#39; in运算符不用于测试包含,它用于for .. in ..循环中的迭代。

其他答案已经正确地建议您需要.indexOf或JQuery的$.inArray方法来测试数组中的包含,但是有一种更简单(更快)的方法来解决这个问题:改为使用键/值对字典!

var dict = {};
$("a.defined").each(function() {
    dict[this.textContent] = this.title;
});

之后,您可以使用for key in dict来迭代唯一的西班牙语单词列表,并使用dict[key]来获取相应的英语翻译。

答案 3 :(得分:0)

试试这个:

<强>的JavaScript

var arr = {};
$("a").each(function() {
var spanishWord = this.text;
var englishWord = this.title;
if(spanishWord in arr) {
    console.log("do nothing");
} else {
    arr[spanishWord] = englishWord;
}
});
console.log(arr);