数组其他问题
2021-02-26 本文已影响0人
岚平果
1. 数组里面有10万个数据,取第一个元素和第10万个元素的时间相差多少
答:数组可以直接根据索引取的对应的元素,所以不管取哪个位置的元素的时间消耗时间几乎一致,
差异可以忽略不计
2. for…in 与 for…of 的区别
1. 都可以遍历数组,for in 返回数组的下标(key);for of 返回数组的元素;
const arr1 = ['a', 'b', 'c'];
for (let i in arr1) {
console.log(i) // 0, 1, 2
}
const arr2 = ['a', 'b', 'c'];
for (let i of arr2) {
console.log(i) // a, b, c
}
………………………………………………………………………………………………………………………………………………………………………………………………………………
2. 遍历对象 for in 遍历获取对象 key 值; for of 报错;
const json = {"a": 1, "b": 2, "c": 3};
for (let i in json) {
console.log(i) // a, b, c
}
for (let i of json) {
console.log(i) // 数据格式错误
}
3. 给数组手动添加属性, for in 循环可以遍历出 name 这个添加属性的键名
const arr3 = ['a', 'b'];
arr3.name = 'c';
for (let i in arr3) {
console.log(i) // 0, 1, name
}
4. for in 的特点:
a. for … in 循环返回的值都是数据结构的 键值名。
b. 遍历对象返回的对象的key值;
c. 遍历数组返回的数组的下标(key)。
d. for … in 循环不仅可以遍历数字键名,还会遍历原型上的key值和手动添加的其他键;
e. 特别情况下, for … in 循环会以任意的顺序遍历键名
f. 总结一句: for in 循环特别适合遍历对象。
5. for of 特点:
a. for of 循环用来获取一对键值对中的值,而 for in 获取的是 键名
b. 一个数据结构只要部署了 Symbol.iterator 属性, 就被视为具有 iterator 接口,
就可以使用 for of循环。
例 3 这个对象,没有 Symbol.iterator这个属性,所以使用 for of会报json is not iterable
c. for of 不同与 forEach, 它可以与 break、continue 和 return 配合使用,
也就是说 for of 循环可以随时退出循环。
6. 我也想让对象可以使用 for of 循环怎么办? 使用 Object.keys() 获取对象的 key 值集合后,
再使用 for of
const obj = {a: 'x', b: 'y'};
for (let i of Object.keys(obj)) {
console.log(i) // a, b
}