【问题标题】:manipluate data inside an array object [duplicate]操作数组对象内的数据[重复]
【发布时间】:2019-07-15 00:44:47
【问题描述】:

我想遍历一个对象并对数据进行一些更改。如果我实际处理一个对象或包含多个对象的数组,我不是 100%,所以任何帮助表示赞赏。

这是我的对象:

var screening = {
    source: "jacket",
    value: {
        Cyan: {
            dotshape: "C",
            frequency: 120,
            angle: 67.5
        },
        Magenta: {
            dotshape: "C",
            frequency: 120,
            angle: 37.5
        },
        Yellow: {
            dotshape: "C",
            frequency: 120,
            angle: 82.5
        },
        "PANTONE 3528 C": {
            dotshape: "C",
            frequency: 120,
            angle: 7.5
        },
        "PANTONE 293 C": {
            dotshape: "C",
            frequency: 120,
            angle: 7.5
        },
        "PANTONE 2748 C": {
            dotshape: "C",
            frequency: 120,
            angle: 7.5
        },
        Varnish: {
            dotshape: "C",
            frequency: 120,
            angle: 0
        }
    }
}

在里面,我基本上想根据 2 个列表来查找和替换“键”(再次不确定术语)。

Old = [Cyan, Magenta, Yellow]
new = [changedName1, changedName2, changedName3]

理想情况下,我希望循环查看当前对象,如果它与数组 Old 中的某些内容匹配,则根据 New 重命名它。如果没有与数组 Old 中的某些内容匹配,则忽略它并保持原样。

提前致谢

【问题讨论】:

    标签: javascript object


    【解决方案1】:

    使用delete删除旧属性,使用[](方括号表示法)和indexOf获取旧属性并创建新属性:

    var screening = {
      source: "jacket",
      value: {
        Cyan: {
          dotshape: "C",
          frequency: 120,
          angle: 67.5
        },
        Magenta: {
          dotshape: "C",
          frequency: 120,
          angle: 37.5
        },
        Yellow: {
          dotshape: "C",
          frequency: 120,
          angle: 82.5
        },
        "PANTONE 3528 C": {
          dotshape: "C",
          frequency: 120,
          angle: 7.5
        },
        "PANTONE 293 C": {
          dotshape: "C",
          frequency: 120,
          angle: 7.5
        },
        "PANTONE 2748 C": {
          dotshape: "C",
          frequency: 120,
          angle: 7.5
        },
        Varnish: {
          dotshape: "C",
          frequency: 120,
          angle: 0
        }
      }
    };
    
    function oldToNew(oldNames, newNames) {
      Object.entries(screening.value).forEach(([key, prop]) => {
        if (oldNames.includes(key)) {
          screening.value[newNames[oldNames.indexOf(key)]] = screening.value[key];
          delete screening.value[key];
        }
      });
    }
    
    oldToNew(["Cyan", "Magenta", "Yellow"], ["Blue", "Purple", "Orange"]);
    
    console.log(screening.value);

    注意:属性不会按顺序排列,因为如ECMAScript Specification所示:

    ECMAScript objectproperties

    unordered 集合

    【讨论】:

    • 嗨 JackThats 非常感谢。我对 JS 非常陌生,但一直在学习。我可以遵循 IF 语句,但我无法理解 Object.entries(screening.value).forEach(([key, prop]) 之前的那一行 .. 道具在做什么?当我运行代码时,我得到以下信息错误,即使它似乎在 1 个错误之上完美工作:6:ReferenceError: Invalid left-hand side in assignment 1 info (from 42 to 43): Object.entries(screening.value).forEach(([key, prop]) => { 1 info ReferenceError: Invalid left-hand side in assignment 1 error Script Execution Error
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2015-02-12
    • 2020-06-30
    • 1970-01-01
    • 2018-10-28
    相关资源
    最近更新 更多