簡體   English   中英

通過比較兩個數組生成一個數組並動態添加一個鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM