2016-10-04 41 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'));

[在阵列唯一值]的