使用Object.keys ES6更改对象键

时间:2017-05-08 03:38:25

标签: javascript reactjs ecmascript-6

我有

var tab = {
abc:1,
def:40,
xyz: 50
}

我想将abc,def,xyz的名称更改为其他内容,是否可能?

我试过

const test = Object.keys(tab).map(key => {
  if (key === 'abc') {
    return [
      a_b_c: tab[key]
    ]
  }
});

console.log(test);

我有很多未定义的键。

8 个答案:

答案 0 :(得分:5)

以下是基于映射要替换的值的对象替换键的完整代码:

const tab = {abc: 1, def: 40, xyz: 50};
const replacements = {'abc': 'a_b_c', 'def': 'd_e_f'};

let replacedItems = Object.keys(tab).map((key) => {
  const newKey = replacements[key] || key;
  return { [newKey] : tab[key] };
});

这将输出一个包含三个对象的数组,其中键被替换。如果你想从中创建一个新对象,只需:

const newTab = replacedItems.reduce((a, b) => Object.assign({}, a, b));

输出:{"a_b_c": 1, "d_e_f": 40, "xyz": 50}

答案 1 :(得分:3)

使用lodash mapKeys函数,它很容易转换对象键。

let tab = {
  abc: 1,
  def: 40,
  xyz: 50
}

const map = {
  abc: "newabc",
  def: "newdef",
  xyz: "newxyz"
}

// Change keys
_.mapKeys(tab, (value, key) => {
  return map[value];
});

// -> { newabc: 1, newdef: 40, newxyz: 50 }

答案 2 :(得分:2)

到目前为止我发现的最短的方法:

const tab = {abc: 1, def: 40, xyz: 50};

const {'abc': 'a_b_c', 'def': 'd_e_f', ...rest} = tab;
tab = {'a_b_c', 'd_e_f', ...rest}

答案 3 :(得分:0)

您可以添加新密钥并删除旧密钥。

var tab = {
abc:1,
def:40,
xyz: 50
}

    var key = 'abc'
    console.log(key)
    tab['a_b_c'] = tab[key]
    delete tab[key]
    
 
console.log(tab);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

答案 4 :(得分:0)

这是解构分配和箭头功能的一种方法。

const rename = (({abc: a_b_c, ...rest}) => ({a_b_c, ...rest}))
console.log(rename({abc: 1, def: 2}))
// { "a_b_c": 1, "def": 2 }

答案 5 :(得分:0)

只有一个类似的用例,并且能够解决它。

const options = {
  method: "POST", // *GET, POST, PUT, DELETE, etc.
  ...
  body: JSON.stringify({}) // body data type must match "Content-Type" header
}

window.fetch(url,{
...options,
...{ method: "PUT", body: JSON.stringify(plot) }
})

答案 6 :(得分:0)

你可以使用 ES6 解构。例如,您可以执行以下操作:

let sample = {a:1,b:2,c:3}
let {a:pippo,...rest} = sample
sample={pippo,...rest}

答案 7 :(得分:-1)

希望这会有所帮助

初始数据:

let tab = {
    abc: 1,
    def: 40,
    xyz: 50
};

新密钥映射:

let newKeyMappings = {
    abc: 'cab',
    def: 'fed',
    xyz: 'zyx'
};

使用新密钥映射值

let mapped = Object.keys(tab).map(oldKey=> {
    let newKey = newKeyMappings[oldKey];
    let result ={};
    result[newKey]=tab[oldKey];
    return result;
});

因为mapped包含映射对象的数组apply reduce operator

let result = mapped.reduce((result, item)=> {
    let key = Object.keys(item)[0];
    result[key] = item[key];
    return result;
}, {});