要设置的JavaScript数组

j9per5c4  于 2022-12-21  发布在  Java
关注(0)|答案(6)|浏览(121)

MDN引用了JavaScript的Set集合抽象。我有一个对象数组,我想将其转换为一个集合,以便能够按名称删除(.delete())各种元素:

var array = [
    {name: "malcom", dogType: "four-legged"},
    {name: "peabody", dogType: "three-legged"},
    {name: "pablo", dogType: "two-legged"}
];

我如何将这个数组转换成一个集合?更具体地说,有没有可能在不迭代上述数组的情况下做到这一点?文档相对缺乏(对于示例化的集合来说足够了;不用于转换-如果可能的话)。
我可能也在考虑转换为Map,以便通过键移除,我试图实现的是一个可迭代的集合,可以通过主要通过键(而不是索引)访问元素来访问或修改它。
从一个数组到另一个数组的转换是最终目标。

pgx2nnw8

pgx2nnw81#

只需将数组传递给Set构造函数。Set构造函数接受一个iterable参数。Array对象实现iterable协议,因此它是一个有效的参数。

var arr = [55, 44, 65];
var set = new Set(arr);
console.log(set.size === arr.length);
console.log(set.has(65));

See here

gcmastyq

gcmastyq2#

如果您从以下内容开始:

let array = [
    {name: "malcom", dogType: "four-legged"},
    {name: "peabody", dogType: "three-legged"},
    {name: "pablo", dogType: "two-legged"}
];

如果你想要一组,比如说,名字,你会这样做:

let namesSet = new Set(array.map(item => item.name));
wpx232ag

wpx232ag3#

根据定义***“Set是值的集合,其中每个值只能出现一次。"***因此,如果数组中有重复值,则重复值中只有一个值会添加到Set中。

var arr = [1, 2, 3];
var set = new Set(arr);
console.log(set); // {1,2,3}

var arr = [1, 2, 1];
var set = new Set(arr);
console.log(set); // {1,2}

因此,如果数组中有重复的值,请不要转换为set。

np8igboo

np8igboo4#

levi所说的将其传递给构造函数是正确的,但是您也可以使用一个对象。
我想Veverke想说的是,你可以很容易地在一个对象上使用delete keyword来达到同样的效果。
我想你是被术语搞糊涂了属性是对象的组成部分,你可以用它作为命名索引(如果你愿意这么想的话)。
试试这样的方法:

var obj = {
    "bob": "dole",
    "mr.": "peabody",
    "darkwing": "duck"
};

然后,你可以这样做:

delete obj["bob"];

对象的结构将如下所示:

{
    "mr.": "peabody",
    "darkwing": "duck"
}

有同样的效果。

yvfmudvl

yvfmudvl5#

const categoryWithDuplicates =[
  'breakfast', 'lunch',
  'shakes',    'breakfast',
  'lunch',     'shakes',
  'breakfast', 'lunch',
  'shakes'
]

const categoryWithoutDuplicates =[...new Set(categoryWithDuplicates)];
console.log(categoryWithoutDuplicates)

输出:[“早餐”、“午餐”、“奶昔”]

bvk5enib

bvk5enib6#

var yourSetAsArray = Array.from(new Set([1, 2, 2, 3, 3, 4, 4])); 
// returns [1, 2, 3, 4]

相关问题