JavaScript。如何通过数组函数更改对象中的某些数据?

标签 javascript arrays object lodash

也许有人知道如何通过数组函数更改对象中的某些数据?

比如我有一个对象:

var nodes = [
  { topic: "Games",    topicscore: 100},
  { topic: "Fun",      topicscore: 550},
  { topic: "New York", topicscore: 7799},
  { topic: "Hillary",  topicscore: 745},
  { topic: "Politics", topicscore: 512},
  { topic: "Trump",    topicscore: 71}
];

我有一个函数:

var filterScoreValues = function(array_input){
  var a_out = [];
  array_input.forEach(function(x){
    a_out.push(Math.ceil(x / Math.max.apply(null,array_input) * 10) + 5)
  });
  return a_out;
};

如何将此算法应用到对象的 topicscore

我写了这个,但我想要一个“漂亮”的变体,可能是通过 lodash 或类似的:

function filterScoreValues(input){
  var array = input.map(function (i) {
    return i.topicscore;
  });

  array.forEach(function(x, index){
    input[index]['topicscore'] = Math.ceil(x / Math.max.apply(null, array) * 10) + 5;
  });

  return input;
 };

我经常在我的变体上使用循环.. :(

最佳答案

how to change some data in an object via a function

使用以下优化方法(没有函数。如果需要多次调用该函数,可以将其包装到函数中):

var nodes = [
  { topic: "Games",    topicscore: 100},
  { topic: "Fun",      topicscore: 550},
  { topic: "New York", topicscore: 7799},
  { topic: "Hillary",  topicscore: 745},
  { topic: "Politics", topicscore: 512},
  { topic: "Trump",    topicscore: 71}
];

// taking max 'topicscore' at once
var max_score = Math.max.apply(null, nodes.map(function (o) {
    return o.topicscore;    
}));
// processing each 'topicscore' item in place(without creating temporary arrays)
nodes.forEach(function (o) {
    o.topicscore = Math.ceil(o.topicscore / max_score * 10) + 5;
});

console.log(nodes);

关于JavaScript。如何通过数组函数更改对象中的某些数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41402946/

相关文章:

javascript - 代码返回未定义而不是返回值

javascript - jQuery.when : What happens if one function fails? 时

javascript - 我怎样才能让我的 anchor 链接像它下降时那样平滑地滚动回顶部?

c - c 中多维数组的指针

php - 使用 StdClass 对象为多维数组创建 foreach 循环时遇到问题

javascript - 基于单独的对象将数组映射到具有深度的对象

javascript - 如何创建更好的方法来维护基于我的代码访问的最后一页

arrays - 如何使用 json 对象数组创建外部配置单元表

c# - 类中的属性/方法占用内存空间吗?

javascript - 如何在 JavaScript 中将两个数组转换为一个对象?