我有一些代码已经可以工作,但我需要更改对象结构,并且我需要修改代码以便它再次工作。
这是工作代码(带有原始对象数据):
obj = {
"category": [
{
"id": "1",
"category": "1",
"tags": {
"483": "tag1",
"484": "tag2"
}
},
{
"id": "2",
"category": "1",
"tags": {
"483": "tag1",
"484": "tag2"
}
},
{
"id": "3",
"category": "2",
"tags": {
"483": "tag1",
"484": "tag2"
}
},
{
"id": "4",
"category": "2",
"tags": {
"483": "tag1",
"484": "tag2"
}
},
{
"id": "5",
"category": "3",
"tags": {
"483": "tag1",
"484": "tag2"
}
},
]
}
var results = [ ];
for (var i = 0; i < obj.category.length; i++) {
$.each( obj.category[i].tags, function( key, value ) {
results.push(value);
});
}
var uniqueNames = [];
$.each(results, function(i, el){
if($.inArray(el, uniqueNames) === -1) uniqueNames.push(el);
});
console.log(uniqueNames);
我现在需要将对象更改为如下结构:
obj = {
"id": "1",
"category": "1",
"tags": {
"483": "tag1",
"484": "tag2"
}
}
所以,基本上这个类别已经被删除了。
如何让它与我的新对象结构一起工作?
注意:代码应该获取所有可用的标签名称,然后删除重复项,最后将结果添加到数组中
最佳答案
https://jsfiddle.net/qte5oa9g/8/
$(document).ready(function() {
objArr = [
{
"id": "1",
"category": "1",
"tags": {
"483": "tag1",
"484": "tag2"
}
},
{
"id": "2",
"category": "1",
"tags": {
"483": "tag1",
"484": "tag2"
}
},
{
"id": "3",
"category": "2",
"tags": {
"483": "tag1",
"484": "tag2"
}
},
{
"id": "4",
"category": "2",
"tags": {
"483": "tag1",
"484": "tag2"
}
},
{
"id": "5",
"category": "3",
"tags": {
"483": "tag1",
"484": "tag2"
}
},
];
var results = [];
for (var i = 0; i < objArr.length; i++) {
$.each( objArr, function( key, value ) {
(value.tags) ? results.push(value) : false;
});
console.log(results);
}
var uniqueNames = [];
$.each(results, function(i, el){
if($.inArray(el, uniqueNames) === -1) uniqueNames.push(el);
});
console.log(uniqueNames);
}); //onready end
好的。因此,首先,也许您对原因有某种合理性,但如果您要保存一个对象列表,我觉得您应该有一个像“类别”这样的容器或将它们存储在数组中。
在我的示例中,我将对象更改为对象数组。
从那里,您只需检查 array.length 并将要检查的索引设置为对象数组,而不是像您那样设置为内部对象。
有一个名为 Set() 的特定对象用于收集唯一值。它几乎让你的 uniqueNames 东西毫无用处,所以我完全删除了它,只是将结果作为 Set() 调用并记录它。
您只需使用 .add(value) 方法,而不是推送到集合。我在下面列出了它以及数组的引用。
如果您有任何疑问,请随时提问。
引用文献:
关于Javascript 更改代码以读取修改后的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40113308/