JavaScript 要设置的数组
JavaScript Array to Set
MSDN 引用了 JavaScript 的 Set 集合抽象。我有一个对象数组,我想将其转换为一个集合,以便我能够按名称删除 (.delete()
) 各种元素:
var array = [
{name: "malcom", dogType: "four-legged"},
{name: "peabody", dogType: "three-legged"},
{name: "pablo", dogType: "two-legged"}
];
如何将此数组转换为集合?更具体地说,是否可以在不遍历上述数组的情况下执行此操作?文档相对缺乏(对于实例化集来说足够了;如果可能的话,对于转换来说就足够了)。
我可能也在考虑转换为 Map,以便通过密钥删除。我想要完成的是一个可迭代的集合,可以通过主要通过键(而不是索引)访问元素来访问或修改它。
从一个数组到另一个数组的转换是最终目标。
只需将数组传递给 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));
关于将它传递给构造函数的 levi 是正确的,但您也可以使用对象。
我觉得Veverke is trying to say is that you could easily use the delete
keyword在一个对象上能达到同样的效果
我认为您对术语感到困惑; 是对象的组件,您可以将其用作命名索引(如果您想这样想的话)。
尝试这样的事情:
var obj = {
"bob": "dole",
"mr.": "peabody",
"darkwing": "duck"
};
那么,你可以这样做:
delete obj["bob"];
对象的结构将是这样的:
{
"mr.": "peabody",
"darkwing": "duck"
}
效果相同
如果您开始时:
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));
根据定义 "A Set is a collection of values, where each value may occur only once." 因此,如果您的数组有重复值,那么重复值中只有一个值将是已添加到您的集合。
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}
因此,如果您的数组中有重复值,请不要转换为集合。
MSDN 引用了 JavaScript 的 Set 集合抽象。我有一个对象数组,我想将其转换为一个集合,以便我能够按名称删除 (.delete()
) 各种元素:
var array = [
{name: "malcom", dogType: "four-legged"},
{name: "peabody", dogType: "three-legged"},
{name: "pablo", dogType: "two-legged"}
];
如何将此数组转换为集合?更具体地说,是否可以在不遍历上述数组的情况下执行此操作?文档相对缺乏(对于实例化集来说足够了;如果可能的话,对于转换来说就足够了)。
我可能也在考虑转换为 Map,以便通过密钥删除。我想要完成的是一个可迭代的集合,可以通过主要通过键(而不是索引)访问元素来访问或修改它。
从一个数组到另一个数组的转换是最终目标。
只需将数组传递给 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));
关于将它传递给构造函数的 levi
我觉得Veverke is trying to say is that you could easily use the delete
keyword在一个对象上能达到同样的效果
我认为您对术语感到困惑;
尝试这样的事情:
var obj = {
"bob": "dole",
"mr.": "peabody",
"darkwing": "duck"
};
那么,你可以这样做:
delete obj["bob"];
对象的结构将是这样的:
{
"mr.": "peabody",
"darkwing": "duck"
}
效果相同
如果您开始时:
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));
根据定义 "A Set is a collection of values, where each value may occur only once." 因此,如果您的数组有重复值,那么重复值中只有一个值将是已添加到您的集合。
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}
因此,如果您的数组中有重复值,请不要转换为集合。