// Object.entries() 获取对象的键值对
// Object.fromEntries把键值对列表转换成对象
// Object.entries和Object.fromEntries之间是可逆的
// Set和Map的entries()返回iterator对象
// Object转Map
let obj = {foo:'hello', bar: 100};
let map = new Map(Object.entries(obj));
console.log(map); // Map(2) { 'foo' => 'hello', 'bar' => 100 }
console.log(map.get('foo')); // hello
// Map转Object
let map1 = new Map([['foo','hello'],[ 'bar', 100]]);
let obj1 = Object.fromEntries(map);
console.log(map1.get('foo'), map1.get('bar')) // hello 100
console.log(obj1.foo, obj1.bar)// hello 100
// Map values
let map1Val = map1.values();
console.log('map1.values()-', map1Val); // [Map Iterator] { 'hello', 100 }
console.log('map1.values()-', map1Val.hello); // undefined
for(item of map1Val) {
console.log('Map values:', item); // Map values: hello、Map values: 100
}
// Map转数组
let mapArr = Array.from(map1);
let mapArr1 = [...map1];
console.log('Map转数组', mapArr) // [ [ 'foo', 'hello' ], [ 'bar', 100 ] ]
console.log('Map转数组', mapArr1) // [ [ 'foo', 'hello' ], [ 'bar', 100 ] ]
// Array转为Map
// 一维数组
var array = ['one', 'two', 'three'];
var mapp1 = new Map(array.map(function(value, key) {
return [key, value]
}));
console.log('一维数组', mapp1)// Map(3) {0 => "one", 1 => "two", 2 => "three"}
// 二维数组
var array = [[1, 'one'], [2, 'two'], [3, 'three']];
var mapp2 = new Map(array);
console.log('二维数组', mapp2)// Map(3) {1 => "one", 2 => "two", 3 => "three"}
// Object转Array
let obj2 = {foo: 'hello', bar: 100};
let arr = Object.entries(obj);
console.log('object转Array', arr); // [ [ 'foo', 'hello' ], [ 'bar', 100 ] ]
// Array转Object
let arr1 = [ [ 'foo', 'hello' ], [ 'bar', 100 ] ];
let obj3 = Object.fromEntries(arr);
console.log(obj3.foo, obj3.bar); // hello 100
// Array转Set
let arr2 = [ [ 'foo', 'hello' ], [ 'bar', 100 ] ];
let set = new Set(arr);
console.log('Set', set); // Set Set(2) { [ 'foo', 'hello' ], [ 'bar', 100 ] }
let iterator = set.entries();
console.log('iterator', iterator.next()); // iterator { value: [ [ 'foo', 'hello' ], [ 'foo', 'hello' ] ], done: false }
console.log('iterator', iterator.next()); // iterator { value: [ [ 'bar', 100 ], [ 'bar', 100 ] ], done: false }
console.log('iterator', iterator.next()); // iterator { value: undefined, done: true }
// set转数组
let iteratorVal = Array.from(set)
let iteratorVal1 = [...set]
console.log('set转数组1', iteratorVal); // [ [ 'foo', 'hello' ], [ 'bar', 100 ] ]
console.log('set转数组2', iteratorVal1); // [ [ 'foo', 'hello' ], [ 'bar', 100 ] ]
// set转对象
let obj4 = Object.fromEntries(set);
console.log('set转对象', obj4) // { foo: 'hello', bar: 100 }
/**
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。是值的集合,
你可以按照插入的顺序迭代它的元素。
包含:
size,
add(value)
clear()
delete(value)
entries()返回一个新的包含 [value, value] 形式的数组迭代器对象,value 是给定集合中的每个元素,
迭代器 对象元素的顺序即集合对象中元素插入的顺序。
forEach(callbackFn[, thisArg])方法会根据集合中元素的插入顺序,依次执行提供的回调函数
has(value)
keys()
values()方法按照元素插入顺序返回一个具有 Set 对象每个元素值的全新 Iterator 对象
WeakSet 对象是一些对象值的集合, 并且其中的每个对象值都只能出现一次。在WeakSet的集合中是唯一的
它和 Set 对象的区别有两点:
1.与Set相比,WeakSet 只能是对象的集合,而不能是任何类型的任意值。
2.WeakSet持弱引用:集合中对象的引用为弱引用。 如果没有其他的对WeakSet中对象的引用,
那么这些对象会被当成垃圾回收掉。 这也意味着WeakSet中没有存储当前对象的列表。
正因为这样,WeakSet 是不可枚举的。
add(value)
delete(value)
has(value)
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map
Map对象保存键值对,并且能够记住键的原始插入顺序。任何值都可以作为一个键或一个值。
一个Map对象在迭代时会根据对象中元素的插入顺序来进行 — 一个for...of 循环在每次迭代后会
返回一个形式为[key,value]的数组。NaN 是与 NaN 相等的(虽然 NaN !== NaN),
剩下所有其它的值是根据 === 运算符的结果判断是否相等。
size
clear()
delete(key)
entries()
forEach(callbackFn[, thisArg])
get(key) 返回键对应的值,如果不存在,则返回undefined
has(key)
keys()
set(key, value)设置Map对象中键的值。返回该Map对象
values()
WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。
delete(key)
get(key)
has(key)
set(key, value)
*/
// Object.entries() 获取对象的键值对
// Object.fromEntries把键值对列表转换成对象
// Object.entries和Object.fromEntries之间是可逆的
// Set和Map的entries()返回iterator对象
// Object转Map
let obj = {foo:‘hello’, bar: 100};
let map = new Map(Object.entries(obj));
console.log(map); // Map(2) { ‘foo’ => ‘hello’, ‘bar’ => 100 }
console.log(map.get(‘foo’)); // hello
// Map转Object
let map1 = new Map([[‘foo’,‘hello’],[ ‘bar’, 100]]);
let obj1 = Object.fromEntries(map);
console.log(map1.get(‘foo’), map1.get(‘bar’)) // hello 100
console.log(obj1.foo, obj1.bar)// hello 100
// Map values
let map1Val = map1.values();
console.log(‘map1.values()-’, map1Val); // [Map Iterator] { ‘hello’, 100 }
console.log(‘map1.values()-’, map1Val.hello); // undefined
for(item of map1Val) {
console.log(‘Map values:’, item); // Map values: hello、Map values: 100
}
// Map转数组
let mapArr = Array.from(map1);
let mapArr1 = […map1];
console.log(‘Map转数组’, mapArr) // [ [ ‘foo’, ‘hello’ ], [ ‘bar’, 100 ] ]
console.log(‘Map转数组’, mapArr1) // [ [ ‘foo’, ‘hello’ ], [ ‘bar’, 100 ] ]
// Array转为Map
// 一维数组
var array = [‘one’, ‘two’, ‘three’];
var mapp1 = new Map(array.map(function(value, key) {
return [key, value]
}));
console.log(‘一维数组’, mapp1)// Map(3) {0 => “one”, 1 => “two”, 2 => “three”}
// 二维数组
var array = [[1, ‘one’], [2, ‘two’], [3, ‘three’]];
var mapp2 = new Map(array);
console.log(‘二维数组’, mapp2)// Map(3) {1 => “one”, 2 => “two”, 3 => “three”}
// Object转Array
let obj2 = {foo: ‘hello’, bar: 100};
let arr = Object.entries(obj);
console.log(‘object转Array’, arr); // [ [ ‘foo’, ‘hello’ ], [ ‘bar’, 100 ] ]
// Array转Object
let arr1 = [ [ ‘foo’, ‘hello’ ], [ ‘bar’, 100 ] ];
let obj3 = Object.fromEntries(arr);
console.log(obj3.foo, obj3.bar); // hello 100
// Array转Set
let arr2 = [ [ ‘foo’, ‘hello’ ], [ ‘bar’, 100 ] ];
let set = new Set(arr);
console.log(‘Set’, set); // Set Set(2) { [ ‘foo’, ‘hello’ ], [ ‘bar’, 100 ] }
let iterator = set.entries();
console.log(‘iterator’, iterator.next()); // iterator { value: [ [ ‘foo’, ‘hello’ ], [ ‘foo’, ‘hello’ ] ], done: false }
console.log(‘iterator’, iterator.next()); // iterator { value: [ [ ‘bar’, 100 ], [ ‘bar’, 100 ] ], done: false }
console.log(‘iterator’, iterator.next()); // iterator { value: undefined, done: true }
// set转数组
let iteratorVal = Array.from(set)
let iteratorVal1 = […set]
console.log(‘set转数组1’, iteratorVal); // [ [ ‘foo’, ‘hello’ ], [ ‘bar’, 100 ] ]
console.log(‘set转数组2’, iteratorVal1); // [ [ ‘foo’, ‘hello’ ], [ ‘bar’, 100 ] ]
// set转对象
let obj4 = Object.fromEntries(set);
console.log(‘set转对象’, obj4) // { foo: ‘hello’, bar: 100 }
/**
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。是值的集合,
你可以按照插入的顺序迭代它的元素。
包含:
size,
add(value)
clear()
delete(value)
entries()返回一个新的包含 [value, value] 形式的数组迭代器对象,value 是给定集合中的每个元素,
迭代器 对象元素的顺序即集合对象中元素插入的顺序。
forEach(callbackFn[, thisArg])方法会根据集合中元素的插入顺序,依次执行提供的回调函数
has(value)
keys()
values()方法按照元素插入顺序返回一个具有 Set 对象每个元素值的全新 Iterator 对象
WeakSet 对象是一些对象值的集合, 并且其中的每个对象值都只能出现一次。在WeakSet的集合中是唯一的
它和 Set 对象的区别有两点:
1.与Set相比,WeakSet 只能是对象的集合,而不能是任何类型的任意值。
2.WeakSet持弱引用:集合中对象的引用为弱引用。 如果没有其他的对WeakSet中对象的引用,
那么这些对象会被当成垃圾回收掉。 这也意味着WeakSet中没有存储当前对象的列表。
正因为这样,WeakSet 是不可枚举的。
add(value)
delete(value)
has(value)
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map
Map对象保存键值对,并且能够记住键的原始插入顺序。任何值都可以作为一个键或一个值。
一个Map对象在迭代时会根据对象中元素的插入顺序来进行 — 一个for…of 循环在每次迭代后会
返回一个形式为[key,value]的数组。NaN 是与 NaN 相等的(虽然 NaN !== NaN),
剩下所有其它的值是根据 === 运算符的结果判断是否相等。
size
clear()
delete(key)
entries()
forEach(callbackFn[, thisArg])
get(key) 返回键对应的值,如果不存在,则返回undefined
has(key)
keys()
set(key, value)设置Map对象中键的值。返回该Map对象
values()
WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。
delete(key)
get(key)
has(key)
set(key, value)
*/