2012-11-16 99 views

回答

4
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); 
    } 
} 
+1

不妨把一個'打破;''的塊if'這就是'for'環 – Ian

+1

內部和內部使用['陣列#indexOf'](http://ecma-international.org /ecma-262/5.1/#sec-15.4.4.14),因爲幾乎所有的引擎都有它(對於那些沒有使用的polyfill)。希望本地實現可能比你的循環更快(這絕不是保證)。 –

+0

@ T.J.Crowder是的,這基本上消除了整個'for'循環的東西,並允許一個/兩個班輪。我會發佈一個答案,但這個答案在這裏基本上是這樣。 – Ian

0

如果你不關心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); 
} 
0

看一看underscore.jsunderscore.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); 

刪除重複的元件當然效率較低的第二種方法。

+2

整個庫對於這樣一個簡單的任務來說是矯枉過正的。 – Shmiddty

+0

確實如此,但答案仍然正確,如果OP代碼中還有其他功能可以通過庫來簡化,那麼這個答案可能很有用。 –

+0

@MarkThomas它更簡單,更簡單,但如果你想學習JavaScript或者更喜歡Vanilla JS(比如我),那就不太好了。 – user1431627

1

如果你不關心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);​ 

http://jsfiddle.net/C7PBf/

一些決定給定約束至少一個元素是否(回調返回值===真)確實存在與否。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/some