如何解决为什么使用回调函数后数组中的元素不会改变?
我在理解回调函数应如何工作方面存在一些问题。我想做一个功能就像地图方法一样。即使我没有发现任何错误,数组中的元素也不会改变。你能指出我在做什么错吗?
function multiplyFn(x) {
return x * 2;
}
const exampleArray = [1,2,3,4,5,6,8];
function mapFn(array,callback) {
for (const el of array) {
callback(el);
console.log(el)
}
console.log(array)
return array;
}
mapFn(exampleArray,multiplyFn);
解决方法
如果要更改原始数组,可以更新传入函数中的数组参数的索引。
function mapFn(array,callback) {
array.forEach(function(element,index){
let val= callback(element)
array[index] = val
});
return array;
}
,
您需要通过返回的值来更新元素:
function multiplyFn(x) {
return x * 2;
}
let exampleArray = [1,2,3,4,5,6,8];
function mapFn(array,callback) {
for (let i = 0; i < array.length; i++) {
let el = array[i];
array[i] = callback(el);
}
return array;
}
mapFn(exampleArray,multiplyFn);
,
请注意,您只需使用Array#map()即可执行此操作,该操作不会更新原始数组,但会返回一个新数组
function multiplyFn(x) {
return x * 2;
}
const exampleArray = [1,callback) {
return array.map(callback);
}
console.log(mapFn(exampleArray,multiplyFn));
,
如果要实现自己的地图功能,则可以不使用任何内置数组方法来实现
//Define your map method in the Array prototype object
Array.prototype.mymap = function(callback) {
const res = [];
for (let index = 0; index < this.length; index++) {
res[index] = callback(this[index],index,this);
}
return res;
}
const exampleArray = [1,8];
//Let's test with two examples
function multiplyFn(x) {
return x * 2;
}
const first = exampleArray.mymap(multiplyFn)
console.log(first)
const second = exampleArray.mymap((el,array) => ({el,index}))
console.log(second)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。