首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较PHP、laravel或Java脚本中的3种不同数组

如何比较PHP、laravel或Java脚本中的3种不同数组
EN

Stack Overflow用户
提问于 2018-05-21 13:49:11
回答 3查看 65关注 0票数 2

我有三个不同的数组。第一阵列

代码语言:javascript
复制
$years = [2015,2016,2017,2018];

第二阵列

代码语言:javascript
复制
$users = ["a","b","c"];

第三阵列

代码语言:javascript
复制
$data = [
  {"year":2015,"user":"a","amount":100},
  {"year":2016,"user":"a","amount":90},
  {"year":2017,"user":"b","amount":70},
  {"year":2018,"user":"c","amount":80}
];

现在,我想比较所有这些数组,并获取每个用户的数据,也就是说,如果某个用户在特定年份不存在,则应该以下面的格式在该位置插入0。

期望产出:

代码语言:javascript
复制
{"name":"a", "data":[100,90,0,0]},
{"name":"b", "data":[0,0,70,0]},
{"name":"c", "data":[0,0,0,80]}

到目前为止我的代码是

代码语言:javascript
复制
foreach($yeararray as $year)
{
    foreach($usersarray as $user)
    {
        if($user == $data["user"]) && ($year == $data["year"]))
        {
            array_append($newarray, $user);
        }
        else
        {
            array_push($newarray, $user);
        }
    }
}

但这不起作用,我想我的代码出了问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-21 14:06:55

您可以构建一个新的对象数组,并使用indexOf对正确的索引进行赋值。

代码语言:javascript
复制
var years = [2015, 2016, 2017, 2018],
    users = ["a", "b", "c"],
    data = [{ year: 2015, user: "a", amount: 100 }, { year: 2016, user: "a", amount: 90 }, { year: 2017, user: "b", amount: 70 }, { year: 2018, user: "c", amount: 80 }],
    result = users.map(user => ({ user, years: years.map(_ => 0) }));
    
    
data.forEach(({ year, user, amount }) => result[users.indexOf(user)].years[years.indexOf(year)] = amount);

console.log(result);

票数 2
EN

Stack Overflow用户

发布于 2018-05-21 14:13:41

迭代users数组并检索所需的结果。注意,添加一个新用户(d),只返回一个零数组:

代码语言:javascript
复制
var data = [
  {"year":2015,"user":"a","amount":100},
  {"year":2016,"user":"a","amount":90},
  {"year":2017,"user":"b","amount":70},
  {"year":2018,"user":"c","amount":80}
];
var years = [2015,2016,2017,2018];
var users = ["a","b","c","d"]; // Added an extra user just for the demonstration

// Iterate users
var result = users.map(function(user) {
  var thisData = [];
  // Iterate years
  for (var i in years) {    
    var item = 0;
    // Filter out the item for specific year and user
    var rec = data.filter(function(dt) {
      return dt.year == years[i] && dt.user == user;
    });    
    if (rec.length === 1) {
      item = rec[0].amount;
    }
    thisData.push(item);
  }
  return {
    name: user,
    data: thisData
  };
});

console.log(result);
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

票数 1
EN

Stack Overflow用户

发布于 2018-05-21 14:25:34

代码语言:javascript
复制
let users = ["a", "b", "c"];
let year = [2015, 2016, 2017, 2018];
let data = [
  {"year":2015,"user":"a","amount":100},
  {"year":2016,"user":"a","amount":90},
  {"year":2017,"user":"b","amount":70},
  {"year":2018,"user":"c","amount":80}
];

let answer = [];
users.forEach(user => {
  let dataArray = [];

    year.forEach(year => {
      if(data.some(dat => dat.year === year && dat.user===user)){
        dataArray.push(data.find(dat => dat.year === year && dat.user===user).amount)
      }else{
        dataArray.push(0);
      }
    });

  answer.push({"user": user, "data": dataArray});
});

console.log(answer);

首先我们通过users循环,对于每个用户,我们通过每个year循环,使用当前用户和年份,我们可以在data数组中找到存在性,最后计算结果

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50450368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档