对象中能使用call或者applly方法吗
A: 当然可以了,只要有函数的地方就可以使用call或者apply,举个例子:
var Study = {
country: 'china',
age: null,
init: function (name, txt) {
console.log(`${name},特长是:${txt}`);
},
detail: function (name, txt) {
this.init.call(this, name, txt);
}
};
Study.init('Lucy', 'dance');
Study.detail('HanMei', 'dance');
求1000之内的所有既是3又是5的所有数之和
A-1: 最常规的做法
var resultArray = [];
function sumOfMultiples() {
// Implement your solution here
for (var i = 0; i < 1000; i++) {
i % 5 == 0 && i % 3 == 0 ? resultArray.push(i) : '';
}
}
sumOfMultiples();
resultArray.reduce((prev, cur) => {
return prev + cur;
});
A-2: 如果不设置一个空数组,直接来呢
function sumOfMultiples() {
var total = 0;
for (var i = 0; i < 1000; i++) {
if (i % 5 == 0 && i % 3 == 0) total += i;
}
return total;
}
A-3: 如果用reduce来实现怎么来呢,此时又是第一种方法的另外一种实现
function sumOfMultiples () {
var resultArray = [];
for (var i = 0; i < 1000; i++) {
i % 5 == 0 && i % 3 == 0 ? resultArray.push(i) : '';
}
return resultArray.reduce((pre, cur) => pre + cur);
}
将 obj = { 0: ‘I’, 1: ‘love’, 2: ‘you’, 3: ‘really’, length: 4 }转化为真实数组
A-1: 利用Array.prototype.slice.call(arrayLike, 0) 或者 [].slice.call(arrayLike, 0)
var arr = Array.prototype.slice.call(obj);
A-2: 利用Array.from()
var arr = Array.from(obj);
A-3: 遍历截取,你可用
Object.values(obj).slice(0, obj.length)
A-4: for…in遍历
你要考虑的是只收集除length以外的值
var newArr = new Array(obj.length);
for (var key in obj) {
console.log(key, obj[key]);
newArr[key] = obj[key];
}
最后复习一下js中遍历对象和数组的方法:
-
对象
- Object.keys() 和 Object.values() 双基友
- Object.getOwnPropertyNames() 和 Object.key()等效
- 当为类数组时,Array.from() 和 Object.Values() 等效
- for…in遍历
-
数组
- for循环, 神器,适用于各种场景,且执行效率最高
- forEach, 切记这家伙只能遍历数组,不能遍历对象
- for…in, 熟悉吧,这家伙什么都能遍历
- for…of,ES6新增的遍历方法,遍历一切Iterator,包括Set、Map、Generator当然包括Array
- map,等同于forEach
- reduce,这家伙超强大,接受一个初始值和函数