我有三个不同的数组。第一阵列
$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}
];现在,我想比较所有这些数组,并获取每个用户的数据,也就是说,如果某个用户在特定年份不存在,则应该以下面的格式在该位置插入0。
期望产出:
{"name":"a", "data":[100,90,0,0]},
{"name":"b", "data":[0,0,70,0]},
{"name":"c", "data":[0,0,0,80]}到目前为止我的代码是
foreach($yeararray as $year)
{
foreach($usersarray as $user)
{
if($user == $data["user"]) && ($year == $data["year"]))
{
array_append($newarray, $user);
}
else
{
array_push($newarray, $user);
}
}
}但这不起作用,我想我的代码出了问题。
发布于 2018-05-21 14:06:55
您可以构建一个新的对象数组,并使用indexOf对正确的索引进行赋值。
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);
发布于 2018-05-21 14:13:41
迭代users数组并检索所需的结果。注意,添加一个新用户(d),只返回一个零数组:
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);<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
发布于 2018-05-21 14:25:34
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数组中找到存在性,最后计算结果
https://stackoverflow.com/questions/50450368
复制相似问题