可能重複:
Javascript: Determine whether an array contains a value檢查數組是唯一
var thelist = new Array();
function addlist(){
thelist.push(documentgetElementById('data').innerHTML);
}
如何我可以檢查我推數據不陣列thelist
已經exsist?
可能重複:
Javascript: Determine whether an array contains a value檢查數組是唯一
var thelist = new Array();
function addlist(){
thelist.push(documentgetElementById('data').innerHTML);
}
如何我可以檢查我推數據不陣列thelist
已經exsist?
var thelist = []; // Use the array literal, not the constructor.
function addlist(){
// get the data we want to make sure is unique
var data = documentgetElementById('data').innerHTML;
// make a flag to keep track of whether or not it exists.
var exists = false;
// Loop through the array
for (var i = 0; i < thelist.length; i++) {
// if we found the data in there already, flip the flag
if (thelist[i] === data) {
exists = true;
// stop looping, once we have found something, no reason to loop more.
break;
}
}
// If the data doesn't exist yet, push it on there.
if (!exists) {
thelist.push(data);
}
}
如果你不關心IE版本8或更低,則可以使用Array.filter
:
var thelist = new Array();
function addlist(){
var val = documentgetElementById('data').innerHTML;
var isInArray = theList.filter(function(item){
return item != val
}).length > 0;
if (!isInArray)
thelist.push(val);
}
或者,你可以使用Array.indexOf
:
var thelist = new Array();
function addlist(){
var val = documentgetElementById('data').innerHTML;
var isInArray = theList.indexOf(val) >= 0;
if (!isInArray)
thelist.push(val);
}
看一看underscore.js
:underscore.js 然後你可以檢查數組爲
_.contains(thelist, 'value you want to check');
// The full example
var thelist = new Array();
function addlist(){
var data = documentgetElementById('data').innerHTML;
if(!_.contains(thelist, data)) theList.push(data);
}
或可以添加的值到陣列而不關於重複的值,和相加處理結束後,可以通過
theList = _.uniq(theList);
刪除重複的元件當然效率較低的第二種方法。
整個庫對於這樣一個簡單的任務來說是矯枉過正的。 – Shmiddty
確實如此,但答案仍然正確,如果OP代碼中還有其他功能可以通過庫來簡化,那麼這個答案可能很有用。 –
@MarkThomas它更簡單,更簡單,但如果你想學習JavaScript或者更喜歡Vanilla JS(比如我),那就不太好了。 – user1431627
如果你不關心IE < 9你也可以使用Array方法「some」。 只要看看這個例子:
var thelist = [1, 2, 3];
function addlist(data) {
alreadyExists = thelist.some(function (item) {
return item === data
});
if (!alreadyExists) {
thelist.push(data);
}
}
addlist(1);
addlist(2);
addlist(5);
console.log(thelist);
一些決定給定約束至少一個元素是否(回調返回值===真)確實存在與否。
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/some
不妨把一個'打破;''的塊if'這就是'for'環 – Ian
內部和內部使用['陣列#indexOf'](http://ecma-international.org /ecma-262/5.1/#sec-15.4.4.14),因爲幾乎所有的引擎都有它(對於那些沒有使用的polyfill)。希望本地實現可能比你的循環更快(這絕不是保證)。 –
@ T.J.Crowder是的,這基本上消除了整個'for'循環的東西,並允許一個/兩個班輪。我會發佈一個答案,但這個答案在這裏基本上是這樣。 – Ian