Javascript 更改代码以读取修改后的对象

标签 javascript

我有一些代码已经可以工作,但我需要更改对象结构,并且我需要修改代码以便它再次工作。

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

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

好的。因此,首先,也许您对原因有某种合理性,但如果您要保存一个对象列表,我觉得您应该有一个像“类别”这样的容器或将它们存储在数组中。

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

从那里,您只需检查 array.length 并将要检查的索引设置为对象数组,而不是像您那样设置为内部对象。

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

您只需使用 .add(value) 方法,而不是推送到集合。我在下面列出了它以及数组的引用。

如果您有任何疑问,请随时提问。

引用文献:

MDN: Array.prototype

MDN: Set Prototype Add Method

MDN: JavaScript Objects

关于Javascript 更改代码以读取修改后的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40113308/

相关文章:

javascript - 在扩展程序中阅读 Chrome 浏览历史记录

javascript - 2017 年最后一次移动 Chrome 升级 - 如何禁用双击 ZOOM

javascript - SVG 过滤器不绑定(bind)到它的图标

javascript - 为什么我的 2 个具有相同导航栏的网站页面显示不同?

javascript - 使用按钮将本地 JavaScript 变量传递到 Phaser 游戏上的全局变量

javascript - 是否可以使异步函数返回 Mongoose 查询而不是 promise ?

javascript - 如何在无限滚动实现中发出一个 ajax 请求而不是多个请求

javascript - 使用 D3 JavaScript 计算 margin

javascript - 在不知道函数的情况下删除EventListener

javascript - 加速 ViteJs 开发模式。 View 3