gpt4 book ai didi

javascript - 无法使用 angularjs 从 json 获取特定 ID 的计数

转载 作者:行者123 更新时间:2023-12-03 01:49:42 26 4
gpt4 key购买 nike

我需要通过将 ID 与另一个 json 进行比较来获取 ID 存在的计数。然而在某种程度上我是成功的,但对于少数数字来说,它的计数不正确。

var outputProducts = [
{ outputId:'1', inputId: '3', opName: "outMacy" },
{ outputId:'2', inputId: '3', opName: "outMacy2" },
{ outputId:'3', inputId: '3', opName: "outMacy3" },
{ outputId:'4', inputId: '235', opName: "EXPENCE" },
{ outputId:'5', inputId: '235', opName: "opEXPENCE" },
{ outputId:'6', inputId: '235', opName: "opEXPENCE1" },
{ outputId:'8', inputId: '235', opName: "opEXPENCE3" },
{ outputId:'7', inputId: '215', opName: "JCPenny" }
];

这就是我必须从中获取的 json 的样子

temp = [
{ name: "3", shownName: 3 },
{ name: "215", shownName: 1 },
{ name: "235", shownName: 4 }
]

相反,它给了我

temp = [
{ name: "3", shownName: 7 },
{ name: "215", shownName: 1 },
{ name: "235", shownName: 4 }
]

我觉得它在整个 json 中看起来是 3,这样它就得到了 235 的计数,其中有 3 并将其显示为 7 而不是 3

这是我的 plunker(由于 PUSH 错误,看不到整个 json,但是您可以看到生成的临时 json,其名称计数不正确:“3”,showName:7)

https://plnkr.co/edit/aIdlWUS7UFb91hKC4nqx?p=preview

这是我的代码

var outputProducts = [
{ outputId:'1', inputId: '3', opName: "outMacy" },
{ outputId:'2', inputId: '3', opName: "outMacy2" },
{ outputId:'3', inputId: '3', opName: "outMacy3" },
{ outputId:'4', inputId: '235', opName: "EXPENCE" },
{ outputId:'5', inputId: '235', opName: "opEXPENCE" },
{ outputId:'6', inputId: '235', opName: "opEXPENCE1" },
{ outputId:'8', inputId: '235', opName: "opEXPENCE3" },
{ outputId:'7', inputId: '215', opName: "JCPenny" }
];

$scope.outputProducts = outputProducts;

var keysCount, copyOfOutputData, keysCount2, uniqueInputFiles=[], outputFilesCount=[];
keysCount = Object.keys(outputProducts).length;

console.log("$scopes.", $scope.outputProducts);

for (i = 0; i < keysCount; i += 1) {
if (uniqueInputFiles.indexOf(outputProducts[i].inputId) === -1) {
uniqueInputFiles.push(outputProducts[i].inputId);
}
}

console.log("uniqueInputFiles", uniqueInputFiles);

copyOfOutputData = angular.copy(uniqueInputFiles);
keysCount2 = Object.keys(copyOfOutputData).length;

for (i = 0; i < keysCount2; i += 1) {

outputFilesCount = $filter('filter')( outputProducts, { inputId: copyOfOutputData[i] } ).length;
temp = {
name : copyOfOutputData[i],
shownName: outputFilesCount
};
console.log("temp", temp)

$scope.inputFilesWithCount.push(temp);
}

感谢任何帮助

最佳答案

使用reducemap :

var outputProducts = [
{ outputId:'1', inputId: '3', opName: "outMacy" },
{ outputId:'2', inputId: '3', opName: "outMacy2" },
{ outputId:'3', inputId: '3', opName: "outMacy3" },
{ outputId:'4', inputId: '235', opName: "EXPENCE" },
{ outputId:'5', inputId: '235', opName: "opEXPENCE" },
{ outputId:'6', inputId: '235', opName: "opEXPENCE1" },
{ outputId:'8', inputId: '235', opName: "opEXPENCE3" },
{ outputId:'7', inputId: '215', opName: "JCPenny" }
];
function inc(t,x) {
var i = x.inputId;
t[i]? t[i].count++:(t[i] = {count: 1})
return t;
}
var x = outputProducts.reduce((t,x)=> inc(t,x),{});
var y = Object.keys(x).map(v=>({name: v, shownName: x[v].count}))
console.log(y)

关于javascript - 无法使用 angularjs 从 json 获取特定 ID 的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50475503/

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