對象中能使用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,這傢伙超強大,接受一個初始值和函數