【问题标题】:How can I replace property names inside of an object? Javascript如何替换对象内的属性名称? Javascript
【发布时间】:2018-04-09 23:50:01
【问题描述】:

我的任务是创建一个函数,将对象内部的名称与数组内部的名称交换。 Daniel 的名字应该改为 Felix,他的年龄应该保持不变。最后,对象应该是这样的。

{Felix:18,Carlos:21,Sasha:22,John:20}

从此

{Daniel:18,Tyler:21,Michelle:22,Austin:20}

这是我目前所拥有的。我是编程新手,所以请尽量放轻松。

function swapNames(oldNames,newNames){
  for(var i in oldNames) {
    for(var k = 0; k < newNames.length; k++) {
      i = newNames[k];
  }
}
  console.log(i)
}

swapNames({Daniel:18,Tyler:21,Michelle:22,Austin:20}, 
["Felix","Carlos","Sasha","John"])

我认为这将遍历对象和数组并将对象属性名称设置为我所在的当前字符串。但是当我 console.log() 对象是完全一样的。

【问题讨论】:

  • 我不确定,如果您的代码正在编译/解析正确。在代码中,您没有返回任何东西或交换任何对象键。我已经更新了一种方法来完成它,如果这有助于你理解,你可以怎么做。
  • 我真的不认为你可以安全地做到这一点,因为 Javascript 不能保证属性顺序。请改用Array
  • @DanieleCappuccio 你说的财产秩序不能保证是什么意思?能发个链接解释一下吗?

标签: javascript arrays object for-loop


【解决方案1】:

这是你可以做的。

const swapNames = (inputObj, outputNames) => {
  const output = {};
  Object.keys(inputObj).forEach((key, index) => {
    output[outputNames[index]] = inputObj[key];
  });
  return output;
}
console.log(swapNames({
  Daniel: 18,
  Tyler: 21,
  Michelle: 22,
  Austin: 20
}, ["Felix", "Carlos", "Sasha", "John"]));

【讨论】:

  • output[outputNames[index]] 周围的括号有什么作用?使用括号的目的是什么?
  • 这是一种在 javascript 中访问对象的方法。更详细的信息可以在这里找到:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 兄弟!非常感谢!我从来不知道这个!
【解决方案2】:

我不想泄露答案,但你的问题就在这里

for(var i in oldNames) {
    // when i = Daniel;
    for(var k = 0; k < newNames.length; k++) {
      i = newNames[k];
      // you loop here keep change i from Daniel to "Felix","Carlos","Sasha","John", 
      // then you go back to above loop and repeat this, so all four old name got stuck with John 
    }

    console.log(i)
}

【讨论】:

  • 啊!我明白了。我每次都在重置名字,因为约翰是最后一个,所以我留下约翰,对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
相关资源
最近更新 更多