gpt4 book ai didi

javascript - 创建我自己的 array.prototype.map 方法。我如何访问该数组?

转载 作者:行者123 更新时间:2023-12-01 00:55:01 26 4
gpt4 key购买 nike

所以我试图创建一个完全模仿 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"
}
];

假设我想要创建一个返回仅包含电影标题及其 imdbRating 的对象列表的函数。在这种情况下,我可以使用 map() 方法:

let newList = movieList.map( (current) ({'title': current['Title'],     
'rating': current['imdbRating'] }) );

上面的代码行满足了我使用map方法实现目标所需的内容。但是,其他情况的语法可能有所不同

示例 2:

let s = [1, 2, 3, 4];

let s2 = s.map( function(item) {
return item*2;
});

使用映射函数 s2 将返回一个数组,其中每个元素的值都是 s 数组中每个元素的值的两倍。现在,回到这篇文章的主题,我正在解决的问题给了我这个大纲:

Array.prototype.myMap = function(callback) {
let newArray = [];

据我了解,当数组调用 myMap 方法时,它会插入 2 个参数:数组和函数。但我无法理解如何将元素上每个回调函数的值具体分配给 myMap 方法中的 newArray 。特别是因为我不知道如何访问原始数组。

据我所知,我的尝试之一是荒谬的,因为我不知道如何访问数组的长度以及调用 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;
};

到目前为止,我理解 map() 方法的方式是,它需要 3 个参数、一个数组、一个函数以及将通过该函数放入的元素,但我不知道足够了解语法,可以迭代调用 map 方法的数组,但在我的类(class)中没有任何地方教过我如何执行此操作,而且我也没有找到任何提供解决方案的在线资源这个问题。

最佳答案

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);

请注意,改变原型(prototype)方法是非常糟糕的做法 - 尤其是在存在相同方法时创建新方法。 (map 具有 myMap 的所有功能以及更多功能)。

关于javascript - 创建我自己的 array.prototype.map 方法。我如何访问该数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56660756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com