javascript - AngularJS:如何从其他 JSON 中搜索并替换/添加 JSON 对象中的键?

标签 javascript angularjs json

我有一个这种格式的 JSON:

JSON 1

{
  "status": "ok",
  "data": [{
    "id": 1,
    "name": "building No1",
    "floor": 5,
    "code": {
      "1": [{
        "id": 1,
        "code": "MCD-001",
        "selected": false
      }, {
        "id": 2,
        "code": "MCD-002",
        "selected": false
      }],
      "2": [{
        "id": 3,
        "code": "MCD-003",
        "selected": false
      }],
      "3": [{
        "id": 4,
        "code": "MCD-004",
        "selected": false
      }, {
        "id": 5,
        "code": "MCD-004-bis",
        "selected": false
      }, {
        "id": 6,
        "code": "MCD-005",
        "selected": false
      }],
      "4": [{
        "id": 7,
        "code": "MCD-006",
        "selected": false
      }],
      "6": [{
        "id": 8,
        "code": "MCD-007",
        "selected": false
      }],
      "7": [{
        "id": 9,
        "code": "MCD-008",
        "selected": false
      }, {
        "id": 10,
        "code": "MCD-009",
        "selected": false
      }]
    },
    "building_name": "Test Tower",
    "number_lot": true,
    "parking_floor": 0,
    "creation_date": {
      "date": "2017-01-30 00:00:00.000000",
      "timezone_type": 3,
      "timezone": "UTC"
    }
  }]
}

我有另一个 JSON,如下所示:

JSON 2

{
  "LOTS": {
    "1": [{
      "id": 1,
      "code": "LOT-001",
      "floor": 1,
      "selected": true
    }, {
      "id": 2,
      "code": "MCD-002",
      "floor": 1,
      "selected": true
    }],
    "7": [{
      "id": 9,
      "code": "MCD-008",
      "floor": 7,
      "selected": true
    }, {
      "id": 10,
      "code": "MCD-009",
      "floor": 7,
      "selected": true
    }]
  }
}

现在我想在 JSON 1 键中设置 "selected":true ,其中代码为 MCD-008 id:9

AngularJS 是否提供了在模板端或 Controller 端执行某种操作的方法?

我想将按钮的类设置为“默认”或“主要”。这件事已经在做了。我需要传递 selected:true

最佳答案

您可以使用哈希表,首先获取源对象中的 idcode,然后交互替换对象并设置值。

var data1 = { status: "ok", data: [{ id: 1, name: "building No1", floor: 5, code: { "1": [{ id: 1, code: "MCD-001", selected: false }, { id: 2, code: "MCD-002", selected: false }], "2": [{ id: 3, code: "MCD-003", selected: false }], "3": [{ id: 4, code: "MCD-004", selected: false }, { id: 5, code: "MCD-004-bis", selected: false }, { id: 6, code: "MCD-005", selected: false }], "4": [{ id: 7, code: "MCD-006", selected: false }], "6": [{ id: 8, code: "MCD-007", selected: false }], "7": [{ id: 9, code: "MCD-008", selected: false }, { id: 10, code: "MCD-009", selected: false }] }, building_name: "Test Tower", number_lot: true, parking_floor: 0, creation_date: { date: "2017-01-30 00:00:00.000000", timezone_type: 3, timezone: "UTC" } }] },
    data2 = { LOTS: { "1": [{ id: 1, code: "LOT-001", floor: 1, selected: true }, { id: 2, code: "MCD-002", floor: 1, selected: true }], "7": [{ id: 9, code: "MCD-008", floor: 7, selected: true }, { id: 10, code: "MCD-009", floor: 7, selected: true }] } },
    hash = Object.create(null);

data1.data.forEach(function (o) {
    Object.keys(o.code).forEach(function (k) {
        o.code[k].forEach(function (a) {
            var key = [a.id, a.code].join('|');
            hash[key] = a;
        });
    });
});

Object.keys(data2.LOTS).forEach(function (k) {
    data2.LOTS[k].forEach(function (a) {
        var key = [a.id, a.code].join('|');
        if (hash[key]) {
            hash[key].selected = a.selected;
        }
    });
});

console.log(data1);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - AngularJS:如何从其他 JSON 中搜索并替换/添加 JSON 对象中的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42296932/

相关文章:

javascript - 表单发送上的 Google AdWords 转化跟踪

javascript - Bootstrap 切换菜单加载失败

javascript - 当我使用 JQuery(event.preventDefault 方法)停止页面时,页面在按钮单击时刷新 - Asp.Net MVC

javascript - AngularJS 倍数 http.get

javascript - 我的 AngularJS 表达式不起作用

javascript - AngularJS 根据 id 显示值

php - MySQL SELECT WHERE 多个值

javascript - 如何从维基百科表中获取第一列值的列表?

java - 反序列化嵌套 Json 数组

java - 将 Json 转换为特定的类