【问题标题】:How to check the values of first array in second array and add the values associated with them?如何检查第二个数组中第一个数组的值并添加与它们关联的值?
【发布时间】:2018-12-01 17:00:29
【问题描述】:

我有两个带有值的数组。我正在尝试获取desiredArray,它应该检查secondArray 中的firstArray 值,如果它匹配,它应该添加与它们关联的那些值的数字并将其推送到desiredArray。有人可以帮忙吗?

firstArray = ["Jack Sparrow", "Ryan Gosling", "Peter Parker", "Mark Waugh", "Steve Jobs"]

secondArray = ["Jack Sparrow :10", "Ryan Gosling :40", "Peter Parker :30", "Mark Warner: 40", "Shane Warne :30", "Steve Jobs : 20", "Tony Stark :90", "Adam Gilchrist: 45.5"]

desiredArray = [100] //final answer here

function getCount(firstArray, secondArray) {
  firstArray.forEach((e1) => secondArray.forEach((e2) => {
    if (e1 === e2.split(":")[0].trim()) {
      desiredArray.push(e1)
    }
  }));

  return desiredArray;
  console.log(desiredArray);
}

【问题讨论】:

  • 请展示您自己解决此问题的尝试。请记住,我们很乐意帮助您调试代码,但我们不是来为您编写代码
  • 正如@RoryMcCrossan 提到的,我 100% 保证这一点。如果您不确定如何提问,请尝试参考 How do I ask a good question
  • @RoryMcCrossan 当然。这就是我试图做的功能 getCount(firstArray,secondArray) { firstArray.forEach((e1)=>secondArray.forEach((e2)=> { if(e1===e2.split(":")[ 0].trim()){desiredArray.push(e1) } } ));返回期望数组; console.log(desiredArray); }
  • @Harry 你可以编辑你的帖子并将你的代码放在那里:)
  • @Eddie:谢谢。 :)

标签: javascript jquery arrays javascript-objects


【解决方案1】:

您可以使用 2 个reduce。第一个reduce 是从secondArray 创建一个临时对象。使用名称作为键,使用数字作为值。这将更容易检查名称是否存在。无需循环通过secondArray firstArray 的每个循环

第二个reduce 是循环通过firstArray 并对值求和。

var firstArray = ["Jack Sparrow", "Ryan Gosling", "Peter Parker", "Mark Waugh", "Steve Jobs"]

var secondArray = ["Jack Sparrow :10", "Ryan Gosling :40", "Peter Parker :30", "Mark Warner: 40", "Shane Warne :30", "Steve Jobs : 20", "Tony Stark :90", "Adam Gilchrist: 45.5"];

var tempObject = secondArray.reduce((c, v) => {
  let [k, o] = v.split(':');
  c[k.trim()] = +o;
  return c;
}, {});

var desiredArray = [firstArray.reduce((c, v) => c + (tempObject[v] || 0), 0)];

console.log(desiredArray);

【讨论】:

    【解决方案2】:

    你可以使用Array.reduce():

    firstArray=["Jack Sparrow", "Ryan Gosling", "Peter Parker", "Mark Waugh", "Steve Jobs"];
    
    secondArray=["Jack Sparrow :10", "Ryan Gosling :40", "Peter Parker :30", "Mark Warner: 40", "Shane Warne :30", "Steve Jobs : 20", "Tony Stark :90", "Adam Gilchrist: 45.5"];
    
    var result = firstArray.reduce((a,curr)=>{
      var str = secondArray.find((b)=>b.includes(curr));
      if(str){
        a += Number(str.split(":")[1]);
      }
      return a;
    },0);
    console.log(result);

    【讨论】:

      【解决方案3】:

      试试这个

          let count = 0;
      
          secondArray.forEach(item => {
              let data = item.split(":");
              let key = data[0];
              let value = data[1];
              if(key in firstArray){
                  count += value;
              }
          })
      
         let desiredArray = [count];
      

      【讨论】:

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