Javascript修改代码读取修改的对象

Javascript changing code for reading modified object

本文关键字:修改 对象 代码 Javascript 读取      更新时间:2023-09-26

我有一些代码已经工作了,但我需要改变对象结构,我需要修改代码,使其再次工作

下面是工作代码(带有原始对象数据):

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"
        }
    }

JSFiddle

基本上这个类别已经被去掉了

我怎么能让它工作与我的新对象结构?

注意:代码应该获得所有可用的标签名称,然后删除重复的,最后将结果添加到数组

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

好吧。首先,也许你有一些原因,但如果你要保存一个对象列表,我觉得你应该有一个像"类别"这样的容器,或者把它们存储在数组中。

在我的例子中,我将对象更改为对象数组。

从那里你只需要检查数组。长度,并设置你要检查的索引到对象数组,而不是像你那样检查内部对象。

有一个特定的对象用来收集唯一的值,叫做Set()。它几乎使你的uniqueNames的东西无用,所以我完全删除了它,只是调用结果作为Set()并记录它。

您只需使用.add(value)方法而不是推入一个集合。我在下面列出了它和数组的参考。

如果你有任何问题,请尽管提。

引用:

MDN: Array.prototype

MDN: Set Prototype Add Method

MDN: JavaScript Objects