我有两个具有相关信息的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。
任何帮助将不胜感激。
答案 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;
}