我有一个特定的问题,我很难找到答案。
这是代码:
records.forEach(function(record){
var personID = record.id;
var personsInterest = record.interest;
console.log(personID);
console.log(personsInterest);
console.log();
}
它输出以下内容:
138
death note
146
poop
138
poop
146
rick and morty
138
rick and morty
138
lil peep
145
420
我真的很喜欢这样的代码来存储数据
[
{
id: "138",
interests:["death note","poop","rick and morty","lil peep"]
},
{
id: "146",
interests:["poop","rick and morty"]
},
{
id: "145",
interests:["420"]
}
]
根据兴趣数组的长度对其进行排序
答案 0 :(得分:0)
这应该有效。在注释中注释。
const records = [{
id: 138,
interest: 'death note'
},
{
id: 146,
interest: 'poop'
},
{
id: 138,
interest: 'poop'
},
{
id: 146,
interest: 'rick and morty'
},
{
id: 138,
interest: 'rick and morty'
},
{
id: 138,
interest: 'lil peep'
}
];
const sorted = records.reduce((all, record) => {
const person = all.find(p => p.id === record.id);
//If already exists person now contains existing person
if (person) {
person.interests.push(record.interest);
//add new interest
} else all.push({
id: record.id,
interests: [record.interest]
//creates new person object
});
return all;
}, []).sort((a, b) => b.interests.length - a.interests.length);
//sorts based on length of interest array
console.log(sorted);
答案 1 :(得分:0)
要获得预期结果,请使用以下选项
let records = [
{
id: 138,
interests: "death note"
},
{
id: 146,
interests: "poop"
},
{
id: 138,
interests: "poop"
},
{
id: 146,
interests: "rick and morty"
},
{
id: 138,
interests: "rick and morty"
},
{
id: 138,
interests: "lil peep"
},
{
id: 145,
interests: "420"
}
];
let result = [];
records.forEach(record => {
if (result.filter(item => item.id == record.id).length == 0) {
// check whether id exists in result array, if not push object to result array
result.push({ id: record.id, interests: [record.interests] });
} else {
//if id already exists in result array, push interest to interest array of that id
result.forEach(v => {
if (v.id == record.id) {
v.interests.push(record.interests);
}
});
}
});
console.log(result);
答案 2 :(得分:0)
使用具有合适的compareFunction的sort方法对数组进行排序。 arr.sort(compareFunction(a,b))
Sort方法接受一个函数,并根据提供的函数的返回值对数组的元素进行排序。我们将其称为函数compareFunction(a, b)
。
如果compareFunction(a, b)
的返回值小于0:a优先。
如果compareFunction(a, b)
的返回值大于0:b优先。
如果compareFunction(a, b)
的返回值为0:则不执行任何操作。
您想要具有较高兴趣的元素。长度排在第一位。这样我们就可以返回b.interest.length - a.interest.length
。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
var records = [{
id: 10,
interest: ["poop", "rick and morty"]
},
{
id: 11,
interest: ["eminem", "snoop dog"]
},
{
id: 12,
interest: ["death note", "poop", "rick and morty", "lil peep"]
},
{
id: 13,
interest: ["god of war"]
},
];
records = records.sort((a, b) => b.interest.length - a.interest.length);
console.log(records);