我在文本中有一堆.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
有什么想法吗?
答案 0 :(得分:2)
我会分两步执行此操作..一个用于消除重复,另一个用于创建数组:
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);