迹忆客 专注技术分享

当前位置:主页 > 学无止境 > WEB前端 > JavaScript >

在 JavaScript 中为对象创建映射函数

作者:迹忆客 最近更新:2024/03/21 浏览次数:

在很多情况下,你希望对 JavaScript 中的对象执行某些操作。标准库包含实现此目的的各种方法,但这并不意味着涵盖了所有情况。

在这种情况下,没有本地方法可以迭代对象的属性并执行类似于 Array.prototype.map 函数的操作。

因此,如果你想检查每个属性并为其添加特定值,那么你无法使用标准库方法来做到这一点。值得庆幸的是,你可以从头开始创建地图功能并根据需要对其进行自定义。


在 JavaScript 中使用通用 map() 方法为对象创建映射函数

使用本机 map() 函数,此方法可以达到预期的效果。但是,你应该知道,此方法将修改原始对象,而不是创建新对象。

如果你不关心原始对象并且想要结果,那么你可以通过以下方式实现此目的:

let testObject = {'first': 1, 'second': 2, 'third': 3};

Object.keys(testObject).map(function(key, value) {
  testObject[key] += 1
});

console.log(testObject);

输出:

{ first: 2, second: 3, third: 4 }

使用 for in 循环为 JavaScript 中的对象创建映射函数

或者,你也可以使用简单的 for 循环来迭代对象的属性并执行所需的计算。此方法使用 hasOwnProperty() 函数来检查对象是否具有有效属性。

let testObject = {'first': 1, 'second': 2, 'third': 3};

for (var key in testObject) {
  if (testObject.hasOwnProperty(key)) {
    testObject[key] += 1;
  }
}

console.log(testObject);

输出:

{ first: 2, second: 3, third: 4 }

使用 JavaScript 中对象的自定义映射函数创建新对象

如上所述,前一种方法在执行所需操作时会覆盖原始对象。如果你不想这样做,则可以改为创建一个新对象并保持原始对象不变。

Obvisouly,这种方法需要更多的代码,但结果更干净一些。

let testObject = {'first': 1, 'second': 2, 'third': 3};

function customMap(object, mapFn) {
  return Object.keys(object).reduce(function(result, key) {
    result[key] = mapFn(object[key])
    return result
  }, {});
}

let newObject = customMap(testObject, function(value) {
  return value + 1
});

console.log(testObject);
console.log(newObject);

输出:

{ first: 1, second: 2, third: 3 }
{ first: 2, second: 3, third: 4 }

输出显示原始对象和具有修改值的新创建对象。如果你好奇,我们使用的 mapFn 参数是 Array.from() 方法的一部分,它被设计为用作映射函数。


在 JavaScript 中使用 Object.entries()Object.fromEntries() 为对象创建映射函数

如果你的项目允许你使用 ES2019 标准而不用担心向后兼容性,你可以减少创建映射函数所需的代码。

此方法的代码如下所示:

let testObject = {'first': 1, 'second': 2, 'third': 3};

let newObject = Object.fromEntries(
    Object.entries(testObject).map(([key, value]) => [key, value + 1]));

console.log(testObject);
console.log(newObject);

输出:

{ first: 1, second: 2, third: 3 }
{ first: 2, second: 3, third: 4 }

由于这是一个单线,它可能很难维护,即使它更容易实现。


在 JavaScript 中使用 Object.entries()Object.fromEntries() 编写函数以映射你的对象

假设你想让上面的代码更易于管理和维护。在这种情况下,最简单的解决方案是将 Object.entries()Object.fromEntries() 集成到自定义函数中。

因此,你可以通过以下方式重写前面的代码:

let testObject = {'first': 1, 'second': 2, 'third': 3};

function customMap(object, func) {
  return Object.fromEntries(
      Object.entries(object).map(([key, value]) => [key, func(value)]));
}

let newObject = customMap(testObject, (x) => x + 1);

console.log(testObject);
console.log(newObject);

输出:

{ first: 1, second: 2, third: 3 }
{ first: 2, second: 3, third: 4 }

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Do you understand JavaScript closures?

发布时间:2025/02/21 浏览次数:108 分类:JavaScript

The function of a closure can be inferred from its name, suggesting that it is related to the concept of scope. A closure itself is a core concept in JavaScript, and being a core concept, it is naturally also a difficult one.

Do you know about the hidden traps in variables in JavaScript?

发布时间:2025/02/21 浏览次数:178 分类:JavaScript

Whether you're just starting to learn JavaScript or have been using it for a long time, I believe you'll encounter some traps related to JavaScript variable scope. The goal is to identify these traps before you fall into them, in order to av

How much do you know about the Prototype Chain?

发布时间:2025/02/21 浏览次数:150 分类:JavaScript

The prototype chain can be considered one of the core features of JavaScript, and certainly one of its more challenging aspects. If you've learned other object-oriented programming languages, you may find it somewhat confusing when you start

用 jQuery 检查复选框是否被选中

发布时间:2024/03/24 浏览次数:102 分类:JavaScript

在本教程中学习 jQuery 检查复选框是否被选中的所有很酷的方法。我们展示了使用直接 DOM 操作、提取 JavaScript 属性的 jQuery 方法以及使用 jQuery 选择器的不同方法。你还将找到许多有用的

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便