2016-10-04 78 views
1

我有一個數組(或設置?)arr = ['a', 'b', 'c'],我想將d添加到它,這可以通過arr.push('d')完成。推動並刪除數組的副本

但是我只想要數組中的唯一值,並且我希望添加的最新值位於數組的前面。

所以,如果我先添加d數組應該成爲['d', 'a', 'b', 'c'],如果我現在添加b數組應該成爲['b', 'd', 'a', 'c']

它應該是這樣的

function addElement(arr, element) { 
    if (arr.includes(element)) { 
    arr.splice(arr.indexOf(element, 1)); 
    } 
    arr.unshift(element); 
} 

我想這可以做到與集合,因爲集合只能包含唯一值。

+1

可能的複製(http://stackoverflow.com/questions/1960473/unique-values-in-an-array) – christopher

+0

和功能他確實應該工作,它有什麼問題? – Aschab

+0

@AhmerSaeed - 'PHP'未被標記! – Rayon

回答

2

您可以使用Set並提前刪除該項目並添加它。要獲得想要的訂單,您需要反轉呈現的數組。

function addToSet(v, set) { 
 
    set.delete(v); 
 
    set.add(v); 
 
} 
 

 
var set = new Set; 
 

 
addToSet('d', set); 
 
addToSet('c', set); 
 
addToSet('b', set), 
 
addToSet('a', set); 
 
addToSet('d', set); 
 

 
console.log([...set].reverse());

0
var val = 'c'; 
var arr = ['a','b']; 
if($.inArray(val, arr) ==-1){ 
// value dosend exit  
    arr.unshift(val); 
} else { 
    console.log('value already there') 
} 
console.log(arr); 

$ .inArray()的工作方式與的indexOf()方法。它搜索數組中的元素,如果發現它然後返回它的索引。

http://webrewrite.com/check-value-exist-array-javascriptjquery/

0

你的函數工作只是你有一個小的修復

arr.splice(arr.indexOf(element),1); 

var arr = ['a', 'b', 'c'] ; 
 

 
function addElement(arr, element) { 
 
    if (arr.includes(element)) { 
 
    arr.splice(arr.indexOf(element),1); 
 
    } 
 
    arr.unshift(element); 
 
} 
 
addElement(arr,'d'); 
 
addElement(arr,'b'); 
 
console.log(arr);

0

特別是對那些誰不喜歡.unshift()性能調整這將是做這份工作的另一種方式;

function funky(a,e){ 
 
    var ix = a.indexOf(e); 
 
    return (~ix ? a.splice(ix,0,...a.splice(0,ix)) 
 
       : a.splice(0,0,e),a); 
 
} 
 
var a = ['d', 'a', 'b', 'c']; 
 

 
console.log(funky(a,'z')); 
 
console.log(funky(a,'d')); 
 
console.log(funky(a,'c')); 
 
console.log(funky(a,'f'));

[在陣列唯一值]的