Set Map Array Object互转 weekSet weekMap iterator是什么 有什么用 区别是什么 会使用吗 entries fromEntries

11 篇文章 0 订阅
7 篇文章 0 订阅

在这里插入图片描述

// 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)
*/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值