[英]Generate an array by comparing two arrays and add a key dynamically
我的应用程序从API接收数据并将其保存在$scope.newz
。
bookmarkData
从LocalStorage加载。
我正在比较两个数组的contentId的值, $ scope.newz和$ scope.bookmarkData 。
我无法想出如何保存bookmarkstate : true
仅适用于匹配的数组项 。
最后,匹配的记录将被添加到$scope.AllnewsList
。
这是我的代码
if(data.Status.ResponseCode == 200)
{
$("#fetchnews").hide();
// $("#nodata").show();
$("#sError").hide();
//$scope.AllnewsList = data.contents;
$scope.newz = data.contents;
$scope.bookmarkData = JSON.parse(window.localStorage.getItem('bookmark'));
for (var i=0; i < $scope.newz.length; i++)
{
for (var j=0; j < $scope.bookmarkData.data.length; j++)
{
if ($scope.newz[i].ContentId == $scope.bookmarkData.data[j].ContentId)
{
// console.log($scope.newz[i].ContentId);
$scope.bookmarkstate == true;
}
else
{
$scope.bookmarkstate == false;
}
}
}
$scope.AllnewsList = $scope.newz;
}
如果我理解正确的话,你是否想要注册每个newz
无论你是否至少有一个书签。
如果这是你想要做的,我建议你将$scope.bookmarkstate
设置为与newz
数组大小相同的数组。
这样,如果"newz"
数组中的相应单元格包含或不包含书签,则可以在其每个单元格中注册。
if(data.Status.ResponseCode == 200)
{
$scope.bookmarkstate = [];
$("#fetchnews").hide();
$("#sError").hide();
$scope.newz = data.contents;
$scope.bookmarkData = JSON.parse(window.localStorage.getItem('bookmark'));
for (var i=0; i < $scope.newz.length; i++)
{
for (var j=0; j < $scope.bookmarkData.data.length; j++)
{
if ($scope.newz[i].ContentId == $scope.bookmarkData.data[j].ContentId)
{
$scope.bookmarkstate[i] == true;
}
else
{
$scope.bookmarkstate[i] == false;
}
}
}
$scope.AllnewsList = $scope.newz;
}
让我知道这对您有何影响。 干杯。
假设您在评论中提到的密钥并假设动态数据,我按以下方式定义了您的数组。
如果我误解了你的问题,请纠正我
var newz = [{contentId : 1, source : 'demoSrc1', title:'title1' }, {contentId : 2, source : 'demoSrc2', title:'title2' }, {contentId : 3, source : 'demoSrc3', title:'title3' }, {contentId : 4, source : 'demoSrc4', title:'title4' }, {contentId : 5, source : 'demoSrc5', title:'title5' }, {contentId : 6, source : 'demoSrc6', title:'title6' }, {contentId : 7, source : 'demoSrc7', title:'title7' }, {contentId : 8, source : 'demoSrc8', title:'title8' }]; //I defined your newz statically for simplicity. var bookmarkData = [{contentId : 1, source : 'demoSrc1', title:'title1' }, {contentId : 4, source : 'demoSrc4', title:'title4' }, {contentId : 6, source : 'demoSrc6', title:'title6' }, {contentId : 8, source : 'demoSrc8', title:'title8' }]; //SIMILARLY id defined your bookmarkData statically. var AllnewsList = []; for (var i=0; i < newz.length; i++) { for (var j=0; j < bookmarkData.length; j++) { if (newz[i].contentId == bookmarkData[j].contentId) { newz[i].bookmarkstate = true; AllnewsList.push(newz[i]); // console.log(newz[i]); } else { newz[i].bookmarkstate = false; } // console.log(newz[i].contentId); } } console.log(AllnewsList);
Tip : You are not using assignment operator in your code to store status and i will recommend you to use
underscore for this tasks if you want to minimize lines of code.
If i understand you correctly the bookmarkstate array will have true value for each news if news ContentId is equal to each bookmarkData ContentId else it will store false for each news.
var bookmarkstate = [];
var newz = [
{
id: 1,
name: "first",
ContentId: 3
},
{
id: 2,
name: "second",
ContentId: 33
},
{
id: 3,
name: "third",
ContentId: 3
}
];
var bookmarkData = [
{
id: 1,
name: "first",
ContentId: 3
},
{
id: 2,
name: "second",
ContentId: 33
},
{
id: 3,
name: "third",
ContentId: 3
}
];
for (var i = 0; i < newz.length; i++) {
for (var j = 0; j < bookmarkData.length; j++) {
if (newz[i].ContentId == bookmarkData[j].ContentId) {
bookmarkstate[i] = true; // you were not using assignment operator
} else {
bookmarkstate[i] = false;// ou were not using assignment operator
}
}
}
console.log(bookmarkstate);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.