swo*_*ord 4 javascript arrays function ecmascript-6 array.prototype.map
因此,我试图创建一种完全模仿该Array.prototype.map()方法功能的方法,但我对此感到困惑。我认为主要问题在于它的语法。我知道有很多不同的方式来利用该map方法,例如:
示例1:
假设我有一个对象数组 -
var movieList = [
{"Title" : "Inception",
"Awards" : "4 oscars",
"Language" : "English",
"imdbRating" : "8.8"
},
{"Title" : "Inception2",
"Awards" : "44 oscars",
"Language" : "English and Spanish",
"imdbRating" : "9.8"
},
{"Title" : "Interstellar",
"Awards" : "10 oscars",
"Language" : "English",
"imdbRating" : "9.5"
}
];
Run Code Online (Sandbox Code Playgroud)
假设我想要创建一个返回仅包含电影标题及其 imdbRating 的对象列表的函数。在这种情况下,我可以使用以下map()方法:
let newList = movieList.map( (current) ({'title': current['Title'],
'rating': current['imdbRating'] }) );
Run Code Online (Sandbox Code Playgroud)
上面的代码行满足了我使用 map 方法实现目标所需的内容。但是,对于其他情况,语法可能有所不同
示例2:
let s = [1, 2, 3, 4];
let s2 = s.map( function(item) {
return item*2;
});
Run Code Online (Sandbox Code Playgroud)
使用映射函数 s2 将返回一个数组,其中每个元素的值都是 s 数组中每个元素的值的两倍。现在,回到这篇文章的主题,我正在解决的问题给了我这样的概述:
Array.prototype.myMap = function(callback) {
let newArray = [];
Run Code Online (Sandbox Code Playgroud)
据我所知,当数组调用该myMap方法时,它会插入两个参数:数组和函数。但我无法理解如何将元素上每个回调函数的值具体分配给方法newArray中的值myMap。特别是因为我不知道如何访问原始数组。
我知道我的尝试之一是荒谬的,因为我不知道如何访问数组的长度以及调用该myMap方法的数组本身 -
Array.prototype.myMap = function(callback) {
let newArray = [];
let x = this.length();
for(let i=0; i<x; i++){
let counter = callback();
newArray.push(counter);
}
return newArray;
};
Run Code Online (Sandbox Code Playgroud)
到目前为止,我理解该map()方法的方式是,它需要 3 个参数、一个数组、一个函数以及将通过该函数放入的元素,而且我不太了解语法,无法迭代调用的数组map我的课程中没有教过我如何执行此操作的方法,而且我也没有找到任何可以解决此问题的在线资源。
length不是一个方法 - 它只是一个属性。并且您需要传递this[i]到callback正确的输出。
Array.prototype.myMap = function(callback) {
let newArray = [];
let x = this.length;
for (let i = 0; i < x; i++) {
let counter = callback(this[i]);
newArray.push(counter);
}
return newArray;
};
let arr = [1, 2, 3];
arr = arr.myMap(e => e * 2);
console.log(arr);Run Code Online (Sandbox Code Playgroud)
请注意,改变原型方法是一种非常糟糕的做法,尤其是在存在相同方法时创建新方法。(map具有 plus more 的所有功能myMap)。