We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
本篇偏长,大部分看MDN即可
{ [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }
会改变原数组的方法:
// 有趣的是这个特点,同时传入元素和一维数组,会把一维数组解构,我老忘记这个特点 var alpha = ['a', 'b', 'c']; var alphaNumeric = alpha.concat(1, [2, 3]); console.log(alphaNumeric); // ['a', 'b', 'c', 1, 2, 3] [1].concat(2, [3], [[4]]) // [1, 2, 3, [4]] // 配合 reduce 可以对多维数组进行平铺 const flat = (arr) => arr.reduce((prev, next) => prev.concat( Array.isArray(next) ? flat(next) : next ), []) flat([1, [2], [[3, [4, [5]]]]]) // [1, 2, 3, 4, 5]
this
true
false
NaN
// 这个方法我不怎么熟,所以一度误解,我误以为它是给每个位置填充不同数据的, // 后来我又单纯的认为它是给所有位置填充相同数据的, // 其实它可以给特定位置填充 [1, 2, 3].fill(4, 1, 2); // [1, 4, 3] [1, 2, 3].fill(4, -3, -2); // [4, 2, 3] [1, 2, 3].fill(4, NaN, NaN); // [1, 2, 3] [1, 2, 3].fill(4, 3, 5); // [1, 2, 3]
undefined
{name: 'root', value: '0', children: []}
concat
[1, [2]].flat() // [1, 2] [1, [2], [3, [4]]].flat() // [1, 2, 3, [4]] [1, [2], [3, [4]]].flat(2) // [1, 2, 3, 4] // Infinity 牛逼 [1, [2], [3, [4]]].flat(Infinity) // [1, 2, 3, 4]
Array.prototype.map
Array.prototype.flat
FlattenIntoArray
// 也可以用它写个平铺树形数据结构的方法 const flatTree = (treeArr) => { return treeArr.flatMap(item => { return item.children ? [item, ...flatTree(item.children)] : [item] }) } const tree = [ { name: '1', children: [ {name: '11'}, { name: '12', children: [ {name: '121'}, {name: '122', children: [ {name: '1221'} ]} ] } ] }, {name: '2'}, { name: '3', children: [ { name: '31', children: [ { name: '311', children: [ {name: '3111'} ] } ] } ] } ] flatTree(tree)
// 曾经在苏宁时犯过一个错误,误以为遍历时可以改变原数组,真菜 let arr = [1, 2, 3] arr.forEach((item, index) => item += 1 ) // 我TM当时下意识的说会改变,草草草
includes
// 结合 parseInt 的经典面试题 ["1", "2", "3"].map(parseInt); // [1, NaN, NaN]
Number
var obj = { '2': 3, '3': 4, 'length': 2, 'splice': Array.prototype.splice, 'push': Array.prototype.push } obj.push(1) obj.push(2) console.log(obj) // 输出 { '2': 1, '3': 2, 'length': 4, 'splice': Array.prototype.splice, 'push': Array.prototype.push } // chrome控制台输出不展开时是这样的 Object(4) [empty × 2, 1, 2, splice: ƒ, push: ƒ]
其实这个对象属于类数组对象,通过上面 push 可得知,方法内部会无脑 ? Set(O, ! ToString(len), E, true) ,它才不会管你索引 0 和 1 处是不是有值,它只会默认将数组对象当前长度作为索引并设置相应的值!
这个问题我在做 非同凡想优惠券 淘客小程序对接苏宁时也遇到过,其实 forEach 也好,map 也好都是高级函数,本质是 函数嵌套函数!虽然这题 forEach 内用了 async,可是 forEach 函数本身去调用内部嵌套函数时并没有 await,所以这里的 async 只是用来迷惑我们的,它本质还是立即遍历去执行内部嵌套的函数,所以最终都是大约 1s后打印输出。
forEach
map
async
await
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Array 原型对象属性
{ [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }
会改变原数组的方法:
Array.prototype.concat ( ...arguments )
this
值)true
,true
,Array.prototype.copyWithin ( target, start [ , end ] )
Array.prototype.entries ( )
this
值)Array.prototype.every ( callbackfn [ , thisArg ] )
this
值)true
,false
,返回false
true
Array.prototype.fill ( value [ , start [ , end ] ] )
NaN
时返回原数组this
值)undefined
,定义 relativeEnd 为 len;否则,定义 relativeEnd 为 ? ToInteger(end)Array.prototype.filter ( callbackfn [ , thisArg ] )
Array.prototype.find ( predicate [ , thisArg ] )
Array.prototype.findIndex ( predicate [ , thisArg ] )
Array.prototype.flat ( [ depth ] )
{name: 'root', value: '0', children: []}
这种,这种结构平铺没法去提供统一的方法,毕竟对象的属性名都是自定的,不过可以自己写,可以看concat
中的代码this
值)undefined
,Array.prototype.flatMap ( mapperFunction [ , thisArg ] )
Array.prototype.map
和Array.prototype.flat
的结合体!!!FlattenIntoArray
时固定depth为1this
值)Array.prototype.forEach ( callbackfn [ , thisArg ] )
this
值)true
,undefined
Array.prototype.includes ( searchElement [ , fromIndex ] )
Array.prototype.indexOf ( searchElement [ , fromIndex ] )
includes
一样,第二个参数fromIndex容易被忽略includes
不同Array.prototype.join ( separator )
Array.prototype.keys ( )
Array.prototype.values ( )
Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
Array.prototype.map ( callbackfn [ , thisArg ] )
Array.prototype.pop ( )
undefined
!!!Array.prototype.push ( ...items )
this
值)Array.prototype.reduce ( callbackfn [ , initialValue ] )
Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
Array.prototype.reverse ( )
Array.prototype.shift ( )
undefined
Array.prototype.slice ( start, end )
Array.prototype.some ( callbackfn [ , thisArg ] )
Array.prototype.sort ( comparefn )
Number
而不是布尔值Array.prototype.splice ( start, deleteCount, ...items )
Array.prototype.unshift ( ...items )
Array.prototype.toString ( )
this
值)2020-07-27 补充
高级前端面试小程序 js基础第11题
其实这个对象属于类数组对象,通过上面 push 可得知,方法内部会无脑 ? Set(O, ! ToString(len), E, true) ,它才不会管你索引 0 和 1 处是不是有值,它只会默认将数组对象当前长度作为索引并设置相应的值!
Daily-Interview-Question 第 160 题
这个问题我在做 非同凡想优惠券 淘客小程序对接苏宁时也遇到过,其实
forEach
也好,map
也好都是高级函数,本质是 函数嵌套函数!虽然这题forEach
内用了async
,可是forEach
函数本身去调用内部嵌套函数时并没有await
,所以这里的async
只是用来迷惑我们的,它本质还是立即遍历去执行内部嵌套的函数,所以最终都是大约 1s后打印输出。2020-08-05 补充
Daily-Interview-Question 第 43 题:使用 sort() 对数组 [3, 15, 8, 29, 102, 22] 进行排序,输出结果,这个问题很常见。
几行代码解决树结构平铺
The text was updated successfully, but these errors were encountered: