AngularJS ng-repeat和indexOf()检查对象

时间:2019-06-20 21:26:40

标签: arrays angularjs angularjs-ng-repeat

我有两个具有相关信息的json对象(data1和data2)。即,两个对象都具有属性(数组),这些属性又可以具有相同的数据。因此,我试图找出如何正确突出显示这些数据的方法,即绿色相同的数据和红色不同的数据。它以某种方式错误地用红色突出显示了所有数据。

这是html:

<ul>
  <li ng-repeat="item in vm.data2.features"
      ng-class="vm.data1.features.indexOf(item) !== -1 ? 'check' : 'uncheck'">
    <span ng-bind="item.id"></span>
  </li>
</ul>

和对象:

vm.data1 = {
  id: '4569',
  name: 'Given data',
  features: [
    {id: "TEST_TEXT2", desc: 'smth12'},
    {id: "TEST_PPP", desc: 'smthsmthsmth'},
    {id: "TEST_ECASH", desc: "somelongtexthere"}
  ]
};

vm.data2 = {
  id: '1305',
  name: 'Base data',
  features: [
    {id: "TEST_BP", desc: 'smth'},
    {id: "TEST_TEXT2", desc: 'smth12'},
    {id: "TEST_PPP", desc: 'smthsmthsmth'},
    {id: "TEST_TEXT1", desc: 'blahblah'},
    {id: "TEST_ECASH", desc: "somelongtexthere"}
  ]
};

完整的演示是here

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

因为BLOCKSIZE = 2048 function generate_payload(s) if s then local i = 1 return function() local chunk = string.sub(s, i, i+BLOCKSIZE-1) i = i + BLOCKSIZE if chunk ~= "" then return chunk else return nil end end else return source.empty() end end 将比较indexOf(item)的对象引用,所以没有一个对象是相同的。您需要对项目进行深入的等式比较。

item

使用lodash的示例类似于:

{id: "TEST_TEXT2", desc: 'smth12'} === {id: "TEST_TEXT2", desc: 'smth12'} // false vm.data1.features[0] === vm.data1.features[1] // false

因为

_.some(vm.data1.features, otherItem => _.isEqual(item, otherItem))

Lodash的文档:

答案 1 :(得分:1)

Indexof()方法将在对象引用中寻找相似性,而不是id本身。 findIndex()方法可以帮助您。

vm.hasFeature = function(item){
var hasElements= vm.data1.features.findIndex(function(e){
  return e.id == item.id;
});
 console.log(item, hasElements);
 return hasElements;
}

以html

<li ng-repeat="item in vm.data2.features"
    ng-class="vm.hasFeature(item) > -1 ? 'check' : 'uncheck'">
vm.hasFeature = function(item){
   var hasElements= vm.data1.features.findIndex(function(e){
      return e.id == item.id;
    });
    console.log(item, hasElements);
    return hasElements;
} 

CodePen链接:https://codepen.io/anon/pen/ewgLBN?editors=1010