Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用object.keys ES6更改对象键_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript 使用object.keys ES6更改对象键

Javascript 使用object.keys ES6更改对象键,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我有 我想把abc、def、xyz的名字改成别的名字,可以吗 我试过了 var tab = { abc:1, def:40, xyz: 50 } 我有许多未定义的密钥。您可以添加新密钥并删除旧密钥 var选项卡={ abc:1, def:40, xyz:50 } var键='abc' console.log(键) tab['a_b_c']=tab[键] 删除选项卡[键] 控制台日志(选项卡) 希望这会有所帮助 初始数据: const test = Object.keys(tab).map(

我有

我想把abc、def、xyz的名字改成别的名字,可以吗

我试过了

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

我有许多未定义的密钥。

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

var选项卡={
abc:1,
def:40,
xyz:50
}
var键='abc'
console.log(键)
tab['a_b_c']=tab[键]
删除选项卡[键]
控制台日志(选项卡)

希望这会有所帮助

初始数据:

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

console.log(test);
新的密钥映射:

let tab = {
    abc: 1,
    def: 40,
    xyz: 50
};
使用新键映射值

let newKeyMappings = {
    abc: 'cab',
    def: 'fed',
    xyz: 'zyx'
};
因为mapped包含映射对象的数组,所以应用reduce运算符

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

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

let result = mapped.reduce((result, item)=> {
    let key = Object.keys(item)[0];
    result[key] = item[key];
    return result;
}, {});
这将输出一个包含三个对象的数组,其中替换了关键帧。如果要使用它们创建新对象,只需执行以下操作:

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] };
});

这输出:
{“a_b_c”:1,“d_e_f”:40,“xyz”:50}

以下是我如何解决它的。我使用一个映射在现有密钥和新密钥之间进行映射。只需用所需的任何新值替换映射即可。最后,使用
省略
从对象中删除旧关键帧

const newTab = replacedItems.reduce((a, b) => Object.assign({}, a, b));
使用lodash函数可以很容易地变换对象关键点。
let选项卡={
abc:1,
def:40,
xyz:50
}
常数映射={
abc:“新abc”,
def:“newdef”,
xyz:“newxyz”
}
//换钥匙
_.mapKeys(选项卡,(值,键)=>{
返回映射[值];
});
//->{newabc:1,newdef:40,newxyz:50}

使用lodash很容易

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

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


_.each(tab, function(value, key) {
    key = map[key] || key;
    tab[key] = value;
});


console.log(_.omit(tab, Object.keys(map)));

到目前为止我找到的最短路径:

import { mapKeys } from 'lodash';    

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

const test = mapKeys(tab, (value, key) => {
    if (key === 'abc') return 'a_b_c';
    return key;
});

下面是一种解构赋值和箭头函数的方法

const rename=({abc:a_b_c,…rest})=>({a_b_c,…rest}))
log(重命名({abc:1,def:2}))

//{“a_b_c”:1,“def”:2}
您可以对其使用ES6解构。例如,您可以执行以下操作:

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}

当然可以-您的
map
仅回调
返回
s当
key===“abc”
时的任何内容,并将返回
未定义的
else。你期望什么?事实上这会引发语法错误。数组文字没有属性。问题是“如何重命名对象属性?”还是“如何使用
object.keys()
”重命名对象属性?无论如何,您不能重命名属性,必须添加新属性并删除旧属性。或者用所需的键名构建一个新对象。@nnnn我不知道;'我不知道,只要它起作用,我就提到object.keys(),因为这是我首先想到的。基本上,我希望规范化或更改对象键的名称。。顺便说一下,如果已经存在另一个具有新名称的属性,该怎么办?为什么要循环?得到了您的答案,因为OP正在检查单个值,所以不需要它,可以直接编辑它。谢谢,我错过了
对象。assign({},…replacedItems)
也应该这样做。不要忘记将初始参数传递给
reduce
!如果你不知道地图上的abc、def、xyz怎么办?结果如下:非常好。谢谢我想应该是:returnmap[key]我试过这段代码,但它不起作用,你能提供一个REPL吗?谢谢将
const选项卡
更改为
let选项卡
。您没有说明收到的错误。如果有一个嵌入的工作示例,会更有益。将此代码复制并粘贴到其中时的当前错误是:“意外令牌(3:14)”
let sample = {a:1,b:2,c:3}
let {a:pippo,...rest} = sample
sample={pippo,...rest}