jquery 如何防止添加重复的键到javascript数组

yqyhoc1h  于 2023-03-17  发布在  jQuery
关注(0)|答案(8)|浏览(173)

我发现了很多相关的问题,答案都是关于for...in循环和使用hasOwnProperty的,但是我做的事情都不能正常工作。我所要做的就是检查数组中是否存在键,如果不存在,就添加它。
我从一个空数组开始,然后在使用jQuery清理页面时添加键。
最初,我希望像下面这样简单的方法能起作用:(使用通用名称)

if (!array[key])
   array[key] = value;

不去。接着说:

for (var in array) {
   if (!array.hasOwnProperty(var))
      array[key] = value;
}

还尝试:

if (array.hasOwnProperty(key) == false)
   array[key] = value;

所有这些都不起作用,要么没有任何东西被推送到数组中,要么我尝试的东西不比简单地声明array[key] = value更好,为什么这么简单的事情这么难做,有什么想法让它起作用吗?

wn9m85ua

wn9m85ua1#

一般来说,使用对象更好,因为JavaScript实际上没有关联数组:

var foo = { bar: 0 };

然后使用in检查密钥:

if ( !( 'bar' in foo ) ) {
    foo['bar'] = 42;
}

正如在下面的注解中正确指出的,这个方法 * 仅 * 在键是字符串或可以表示为字符串的项(如数字)时有用。

8yoxcaq7

8yoxcaq72#

var a = [1,2,3], b = [4,1,5,2];

b.forEach(function(value){
  if (a.indexOf(value)==-1) a.push(value);
});

console.log(a);
// [1, 2, 3, 4, 5]

如果您想依赖jQuery,请改用jQuery.inArray

$.each(b,function(value){
  if ($.inArray(value,a)==-1) a.push(value);
});

但是,如果所有的值都可以简单且唯一地表示为字符串,则应该使用Object而不是Array,以获得潜在的 * 巨大 * 速度提升(如@JonathanSampson的答案所述)。

kfgdxczn

kfgdxczn3#

ES6中提供了一个更好的替代方法,使用Sets。因此,如果需要一个不应该添加重复项的数组,建议使用Sets,而不是声明Arrays。

var array = new Set();
array.add(1);
array.add(2);
array.add(3);

console.log(array);
// Prints: Set(3) {1, 2, 3}

array.add(2); // does not add any new element

console.log(array);
// Still Prints: Set(3) {1, 2, 3}
k3bvogb1

k3bvogb14#

这里有一个简单的方法使用传播。
此代码将给予重复项:

let colors = ['red', 'orange', 'yellow'];
let moreColors = ['orange', 'green'];

// uh oh! this gives us 'orange' twice
let mergedColors = [...colors, ...moreColors];

因此,您可以在合并数组的同时过滤和删除它们。

let mergedColors = [...colors, ...moreColors.filter(c => !colors.includes(c)) ];
cyej8jka

cyej8jka5#

你可以试试这个:

var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
var uniqueNames = [];
$.each(names, function(i, el){
if($.inArray(el, uniqueNames) === -1) uniqueNames.push(el);
});

Easiest way to find duplicate values in a JavaScript array

ruarlubt

ruarlubt6#

这个逻辑是错误的。考虑一下这个:

x = ["a","b","c"]
x[0]     // "a"
x["0"]   // "a"
0 in x   // true
"0" in x // true
x.hasOwnProperty(0)   // true
x.hasOwnProperty("0") // true

没有理由循环检查 key(或数组的 indices)是否存在。现在,values 是另一回事了...
快乐编码

waxmsbnn

waxmsbnn7#

function check (list){
    var foundRepeatingValue = false;
    var newList = [];
    for(i=0;i<list.length;i++){
        var thisValue = list[i];
        if(i>0){
            if(newList.indexOf(thisValue)>-1){
                foundRepeatingValue = true;
                console.log("getting repeated");
                return true;
            }
       } newList.push(thisValue);
    } return false;
}
var list1 = ["dse","dfg","dse"];
check(list1);

输出:

getting repeated
true
s8vozzvw

s8vozzvw8#

let x = "farceus";
let y = "character";

const commonCharacters = function (string1, string2) {
  let duplicateCharacter = "";
  for (let i = 0; i < string1.length; i += 1) {
    if (duplicateCharacter.indexOf(string1[i]) === -1) {
      if (string2.indexOf(string1[i]) !== -1) {
        duplicateCharacter += string1[i];
      }
    }
  }
  return [...duplicateCharacter];
};

console.log(commonCharacters(x, y));

相关问题