gpt4 book ai didi

javascript - 值未输入 Angular 中的键值对

转载 作者:行者123 更新时间:2023-11-29 17:44:46 25 4
gpt4 key购买 nike

我有一个 json 文件:

var records= 
[
{
"category" : "chinese",
"name": "noodles"
},
{
"category" : "chinese",
"name": "veg"
},
{
"category" : "Indian",
"name": "Dal"
},
{
"category" : "Indian",
"name": "Rajma"
},
{
"category" : "chinese",
"name": "chicken"
},
{
"category" : "continental",
"name": "fish"
},
{
"category" : "continental",
"name": "Veg"
},
{
"category" : "Indian",
"name": "Paratha"
}
]

我正在尝试将此 JSON 转换为以下格式:

var newcat = 
{
"chinese": [
{ "name": "noodles", "category": "chinese" },
{"name": "veg", "category": "chinese"},
{"name":"chicken", "category": "chinese"}
],
"indian": [
{ "name": "Dal", "category": "indian" },
{"name": "rajma", "category": "indian"},
{"name":"chicken", "category": "indian" }
],
"continental": [
{ "name": "fish", "category": "continental" },
{ "name": "veg", "category": "continental"}

]
}

我在 Angular 中使用的代码是:

var newcat={}
var arr= {}
var isPresent= false;
var cat
for (let i=0;i< records.length;i++) {
cat= records[i].category
for(let item in newcat) {
if(cat == item) {
isPresent= true
}
else {
isPresent= false
}
}
if(isPresent== false){
newcat[cat]= []
}
else {
newcat[cat].push(records[i])
console.log("===>",newcat)
}

}

除了每个类别的所有项目都没有进入新对象 newcat 之外,我能够构建对象。

console.log 中的结果应该是这样的:

{chinese: Array(3), indian: Array(3), continental: Array(2)}

相反,它是这样的:

{chinese: Array(0), indian: Array(1), continental: Array(1)}

我不明白为什么所有的元素都没有进入

最佳答案

如果您已经在使用 Lodash,请使用 _.groupBy .否则,您可以编写自己的 groupBy 函数:

var records = [
{
"category" : "chinese",
"name": "noodles"
},
{
"category" : "chinese",
"name": "veg"
},
{
"category" : "Indian",
"name": "Dal"
},
{
"category" : "Indian",
"name": "Rajma"
},
{
"category" : "chinese",
"name": "chicken"
},
{
"category" : "continental",
"name": "fish"
},
{
"category" : "continental",
"name": "Veg"
},
{
"category" : "Indian",
"name": "Paratha"
}
];

function groupBy(array, key) {
return array.reduce((groups, value) => {
const group = groups[value[key]] || (groups[value[key]] = []);
group.push(value);
return groups;
}, {});
}

console.log(groupBy(records, 'category'));

或者,使用 for 循环代替 reduce:

function groupBy(array, key) {
const groups = {};
for(let i = 0; i < array.length; i++) {
const value = array[i];
const valueKey = value[key];
if(!groups[valueKey]) groups[valueKey] = [];
groups[valueKey].push(value);
}
return groups;
}

编辑:修复您现有的代码:

您的实现有两个问题。首先,设置isPresentfor/in 循环在找到匹配后不会中断。其次,末尾的 else 语句导致类别中的第一项不被推送,因为您所做的只是创建空类别数组。这里有修复:

var records = [
{
"category" : "chinese",
"name": "noodles"
},
{
"category" : "chinese",
"name": "veg"
},
{
"category" : "Indian",
"name": "Dal"
},
{
"category" : "Indian",
"name": "Rajma"
},
{
"category" : "chinese",
"name": "chicken"
},
{
"category" : "continental",
"name": "fish"
},
{
"category" : "continental",
"name": "Veg"
},
{
"category" : "Indian",
"name": "Paratha"
}
];


var newcat = {};
var arr = {};
var isPresent = false;
var cat;

for (let i=0; i < records.length; i++) {
cat= records[i].category
for(let item in newcat) {
if(cat == item) {
isPresent= true
break;
}
else {
isPresent= false
}
}
if(isPresent== false){
newcat[cat] = []
}
newcat[cat].push(records[i])
}

console.log(newcat);

关于javascript - 值未输入 Angular 中的键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50535469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com