我有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);
}
我想这可以通过集合完成,因为集合只能包含唯一值。
答案 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'));