javascript - 映射一个对象并使用 native JS 更改一个属性值

标签 javascript node.js

我希望能够返回数据结果集,只需将日期字段的格式更改为更易读的格式,而保留所有其他数据不变。我宁愿在没有第三方库的情况下这样做。

这是我目前所拥有的:

//Get all the Tasks
function getAllTasks() {
  return models.gantt_tasks.findAll()
  .then(function(tasks){

    let results = tasks.map(task => task.start_date = task.start_date.format("YYYY-MM-DD"));
    return results;
  })
  .catch(function(e) {
    console.error(e);
    return e;
  });
}

我希望 map 在返回数据之前完成。

最佳答案

您可以使用 Object.assign(target, ...sources) ( here ),您希望通过保持其他值不变而仅更改其中一个值。

例如:

const object1 = {
 a: 1,
 b: 2,
 c: 3
};

现在假设您要将 b 的值更改为 22,您可以这样做:

const object2 = Object.assign({}, object1, {b: 22});

console.log(object1);  // { a: 1, b: 2, c: 3 } 
console.log(object2);  // { a: 1, b: 22, c: 3 } 

注意,这不会改变 object1 的值,它会创建一个新的空对象,如 Object.assign() 的第一个参数中定义的那样,它会向空对象添加更多参数,并且如果再次遇到相同的键,则更新该键的值。

这样你可以改变一个对象的一个​​甚至多个值。

A BETTER WAY

Airbnb 的 JavaScript Style Guide() {} 说:

Prefer the object spread operator over Object.assign to shallow-copy objects.

// very bad
const original = { a: 1, b: 2 };
const copy = Object.assign(original, { c: 3 }); // this mutates `original` ಠ_ಠ
delete copy.a; // so does this

// bad
const original = { a: 1, b: 2 };
const copy = Object.assign({}, original, { c: 3 }); // copy => { a: 1, b: 2, c: 3 }

// good
const original = { a: 1, b: 2 };
const copy = { ...original, c: 3 }; // copy => { a: 1, b: 2, c: 3 }

您可以查看完整文档 here

关于javascript - 映射一个对象并使用 native JS 更改一个属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39462733/

相关文章:

javascript - 如何将变量传递给 JavaScript 函数?

node.js - 使用 node.js 执行命令

node.js - 在 Windows 7 中向 meteor 应用程序添加包时出现“node-gyp rebuild”安装错误

node.js - 分配给 node.js 变量的值返回奇怪的值

javascript - Skype 聊天机器人框架 - node.js

javascript - 使用 Facebook Graph API 创建带有位置的帖子

javascript - 带有悬停的下拉多级菜单

javascript - 如何使用 Javascript 添加 CSS?

javascript - HTML5 验证在 backbone.js onclick 路由到另一个 View 中不起作用?

node.js - 如何从无服务器 cli 设置 Cloudformation 完全访问权限