【问题标题】:Modify JavaScript code to use higher order functions修改 JavaScript 代码以使用高阶函数
【发布时间】:2020-08-19 04:12:22
【问题描述】:

我下面的代码工作正常,并提供了正确的所需输出。但我正在尝试使用地图、过滤器等而不是 for 循环。 Lodash 地图和过滤器也可以使用。

var arr = [
  {"comp_id":1, desc: 'from comp1', updated: true},
{
"comp_id":2, desc: 'from comp2', updated: false}
  ];

  var complaint_sources = [
    {"comp_id":2,"consumer_source":"Hotline In","description_option":"English"},
    {"comp_id":1,"consumer_source":"Online","description_option":"Other"},
    {"comp_id":1,"consumer_source":"Email","description_option":null},
    {"comp_id":2,"consumer_source":"Email","description_option":null}]

  for(let i =0 ;i<arr.length;i++) {
    let x=[];
    for(let j=0;j<complaint_sources.length;j++){
      if(arr[i].comp_id === complaint_sources[j].comp_id){
        x.push(complaint_sources[j]);
        arr[i].comp_src = x;
      }
    }
  }
  console.log(arr);

基本上,我在 arr 数组中循环,并在其中循环通过complaint_sources 数组,当comp_id 匹配时,我正在修改arr 数组并将comp_src 属性添加到arr 数组的对象中。这个 comp_src 属性将是一个由 comp_id 匹配的投诉源数组。

【问题讨论】:

  • 请添加所需的输出
  • 由于代码有效,您可以随时尝试codereview.stackexchange.com
  • 那么您尝试使用mapfilter 是什么?
  • 当您将arr[i].comp_src = x; 移出内部for 循环时,可能更容易看到如何执行此操作(这样实际上每个arr[i] 都会得到一个.comp_src,即使它是空数组)。

标签: javascript


【解决方案1】:

这将起作用:

var arr = [
  {"comp_id":1, desc: 'from comp1', updated: true},
  {"comp_id":2, desc: 'from comp2', updated: false}
];

var complaint_sources = [
  {"comp_id":2,"consumer_source":"Hotline In","description_option":"English"},
  {"comp_id":1,"consumer_source":"Online","description_option":"Other"},
  {"comp_id":1,"consumer_source":"Email","description_option":null},
  {"comp_id":2,"consumer_source":"Email","description_option":null}
];
  
const grouped_sources = complaint_sources.reduce((acc, value) => {
  (acc[value.comp_id] = acc[value.comp_id] || []).push(value);
  return acc;
}, {})
  
const data = arr.map((comp) => ({
  ...comp,
  comp_src: grouped_sources[comp.comp_id]
}));

console.log(data);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多