2016-06-16 1 views
1

내 앱은 API에서 데이터를 받아 $scope.newz에 저장합니다.두 배열을 비교하고 동적으로 키를 추가하여 배열을 생성합니다.

bookmarkData은 LocalStorage에서로드됩니다.

나는 두 배열의 콘텐츠 ID의 값, $ scope.newz$ scope.bookmarkData을 비교하고있다.

난 단지 일치하는 배열 항목에 대한 bookmarkstate : true을 저장하는 방법을 알아낼 수 없습니다.

마지막으로 일치하는 레코드는 $scope.AllnewsList에 추가됩니다. 난 당신이 정확하게 당신이 적어도 하나의 북마크를 가지고 있는지 여부를 각 newz에 등록 을 찾고 이해하는 경우

여기에 내 코드

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; 
    } 
+0

shahrukh, 아이디어를 얻기 위해 어레이를 정의 해 주시겠습니까? –

+0

@Tirthraj Barot My 2 배열은 1) $ scope.newz (서비스의 데이터로 구성)와 2) $ scope.bookmarkData (로컬에 저장 됨)입니다. 이드와 비교해보고 싶습니다. 거기에. 그리고 같은 상태가 3) $ scope.AllnewsList에 반영되어야합니다 내 뉴스에 그것을 표시합니다. – Shahrukh

+0

은 상태를 나타내거나 $ state입니까? –

답변

0

입니다.

그건 당신이 내가 newz 배열로 $scope.bookmarkstate 배열에 같은 크기을 설정하는 것이 좋습니다 수행 할 작업의 경우.

그런 식으로 "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; 
    } 

그것이 어떻게 효과가 있었는지 알려주십시오. 건배.

+0

귀하의 응답을 주셔서 감사하지만 2 배열 $ scope.newz 및 bookmarkData 비교하고 메신저 (ContentId) 거기에 일치하는 경우 그 상태가 사실이어야 비교. – Shahrukh

0

당신이 코멘트에서 언급 한 키를 가정하고 동적 데이터를 가정, 내가 잘못 해석 한 경우 친절하게 귀하의 질문에 정정 해줘 .. 다음과 같은 방식으로

당신의 배열을 정의

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);

+0

고마워요, 도와주세요. 나는 이것을 끝내기위한 다른 방법을 찾아 냈다. api에서 잘못된 값을 얻은 다음 나중에 로컬에서 변경 한 다음 비교하는 것이 좋습니다. – Shahrukh

0
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); 
+0

잘 아픈 내 애플 리케이션에 대한 구체적인 확인하십시오. 메신저 각 기사 (ContentId)가있는 뉴스 앱을 개발합니다. 버튼을 클릭 할 때 책갈피 버튼이 있습니다 (색상 또는 아이콘 변경). 데이터는 로컬 스토리지에 저장됩니다. 내 문제는 내가 새 뉴스 atricles를 업데이트 할 때 북마크 버튼 (컬러)이 거짓 (데이터가 북마크되지 않은 것처럼)을 표시하므로이를 방지하기 위해서입니다. 뉴스가 북마크됨을 보여줍니다. – Shahrukh

관련 문제