JavaScript没有内置的对象map函数,但可以使用以下方法来实现:
function objectMap(object, callback) {
const result = {};
Object.keys(object).forEach(key => {
result[key] = callback(object[key], key, object);
});
return result;
}
const myObject = { a: 1, b: 2, c: 3 };
const newObject = objectMap(myObject, value => value * 2);
console.log(newObject); // { a: 2, b: 4, c: 6 }
console.log(myObject); // { a: 1, b: 2, c: 3 }
objectMap函数接受两个参数:object和callback。object是我们要遍历的对象,callback是我们要应用于每个键值对的函数。objectMap函数返回一个新的对象,该对象包含所有键值对,其值已通过callback函数进行了转换。
ES6引入了一些新的特性,可以使用以下更简洁的方式来实现objectMap函数:
const objectMap = (obj, fn) =>
Object.fromEntries(Object.entries(obj).map(([k, v], i) => [k, fn(v, k, i)]));
const myObject = { a: 1, b: 2, c: 3 };
const newObject = objectMap(myObject, v => 2 * v);
console.log(newObject); // { a: 2, b: 4, c: 6 }
console.log(myObject); // { a: 1, b: 2, c: 3 }
objectMap函数非常有用,可以用于各种场景,例如:
- 将对象中的所有值乘以2:
const newObject = objectMap(myObject, v => 2 * v);
- 将对象中的所有键转换为大写:
const newObject = objectMap(myObject, (v, k) => k.toUpperCase());
- 将对象中的所有值过滤到一个新的对象中:
const newObject = objectMap(myObject, v => v > 2);