推送并删除重复的数组

时间:2016-10-04 07:21:36

标签: javascript arrays set

我有arr = ['a', 'b', 'c']的数组(或Set?),我想向其中添加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);
}

我想这可以通过集合完成,因为集合只能包含唯一值。

4 个答案:

答案 0 :(得分: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());




答案 1 :(得分: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/

答案 2 :(得分: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);




答案 3 :(得分: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'));