创建具有相同键和值的对象,而不重复数据

时间:2017-08-22 14:02:42

标签: javascript object ecmascript-6

在ES6中,我们可以这样做:

const key = "foo"
const myObj = { key }
myObj
// => { foo: "foo" }

因此,{ key }{ key: key }等效。

但是,如何在没有key变量的情况下创建相同的对象?

我想要{ foo: "foo" }之类的东西。我试过了obj = { "foo" },但是它会抛出。

在不使用变量且不复制foo字的情况下,构建此对象的正确方法是什么?

7 个答案:

答案 0 :(得分:5)

  

但是,如何在没有关键变量的情况下创建相同的对象?

     

我想要{ foo: "foo" }之类的东西。我试过了obj = { "foo" },但是它会抛出。

你不能。如果您还没有具有所需名称的变量和所需的值(您在问题中使用初始示例),则必须同时指定名称和值。

如果你的起点是字符串文字"foo",你必须将其分配给变量并使用它(var x = "foo"; var obj = {}; obj[x] = x;),或者写foo两次(var obj = {foo: "foo"} })。

但是你说你不想做其中任何一件事,所以答案是:你不能。

答案 1 :(得分:1)

如果您有一个键名数组,则可以使用Array.reduce():

const keyArray = ['foo', 'bar', 'other'];
const requiredObject = keyArray.reduce((obj, val) => {
  obj[val] = val;
  return obj;
});

答案 2 :(得分:0)

像我猜的那样,通过使用javascript对象的数组访问属性。

您可以使用数组括号Obj['propertyname'] === Obj.propertyname

中的属性名称字符串访问的任何属性

const key = "foo"
const other = "bar";
const myObj = { };
myObj[key]  = key;
myObj[other]  = other;
console.log(myObj);

或者,将对象声明为整体,因为正如你所说的那样,没有变量。所以你只需在代码中定义对象。

const myObj = { 
           foo : 'foo' , 
           bar: 'bar' 
           };
console.log(myObj);

这已经过了深层次。

const myObj = {
   add : function(key) {
      this[key] = key;
   }
}
myObj.add('foo');
myObj.add('bar');
console.log(myObj);

无法复制变量名称或将其分配给变量。

答案 3 :(得分:0)

你可以做的是,使用数组表示法进行分配,如果密钥已经存在,它将覆盖该值。

const myObj = {};

// if just you've just a string, you can use the shortcut, instead use the string on twice.
myObj['key'] = 'key'
myObj['foo'] = 'foo'

const some_var = 'some_var_value'

myObj[some_var] = some_var

答案 4 :(得分:0)

也许您可以使用创作者。

const keyObjCreator = (key) => {
    const obj = {};
    obj[key] = key;
    return obj;
};

keyObjCreater3("foo")
// {foo: "foo"}

答案 5 :(得分:0)

您可以使用带标签的模板文字来解析并完成您想做的事情...

enumify = ([str]) =>
  str
    .replace(/\s/g, '')
    .match(/\{([^\}]+)\}/)[1]
    .replace(/,$/, '')
    .split(',')
    .reduce(
      (o, k) => ({ ...o, [k]: k }),
      {}
    );
  
const enumObj = enumify`{
  foo,
  bar,
}`;

const enumObj2 = enumify`{foo,bar}`;
console.log(enumObj);
console.log(enumObj2);

答案 6 :(得分:0)

您可以使用一个小工具(最初在 react.js 社区流行)keyMirror

var keyMirror = require('keyMirror');

var myObj = keyMirror({ foo: null })