从数组值javascript创建的对象键名称

时间:2016-01-18 03:04:01

标签: javascript arrays javascript-objects

我试图制作一个键,它的键来自一个数组。但是,如果我将对象名称用作array[i],则会收到错误Uncaught SyntaxError: Unexpected token [

itemKeys: {
       for (var i = 0; i < category_keys.Length; i++) {
            category_keys[i]: "font-size: 15px; color: black;",
           }
        }

我还在学习JavaScript而且无法找到解决这个问题的方法。

修改

看一些评论和答案,也许它不是一个对象。它最初是预先编码的。

a.extend(a.Editor.DEFAULTS, {
        itemKeys: {
            "dropdown name 1": "font-size: 15px; color: black;",
            "dropdown name 2": "font-size: 15px; color: black;",
        }})

我想更改显示为从循环数组中选择的不同文本的下拉列表名称。

对不起任何混淆

编辑2

itemKeys我只能猜测是一个对象(typeof给出了undefined)。这是一个插件。我无法更改.extend的主要对象,因为我不想更改插件的核心编码并且出错。这就是为什么我只想改变并循环键值(&#34;下拉名称1和#34;)或者我应该说两个值中的第一个如果它是什么。

我还应该注意,即使对于原始编码,我只是将itemKeys: {更改为itemKeys = {它会中断并提供错误&#39; Uncaught SyntaxError:Unexpected token =&#39;同样适用于"dropdown name 1":所以很遗憾地使用&#39; =&#39;签署根本不工作。

我不是js高手,所以我只假设它是一个标准对象,显然它不是,我真的不知道itemKey是什么类型。最有可能是像我这样的js noob甚至不知道存在的东西。

我的猜测是,如果您通过语法知道itemKey是什么,那么您可能知道如何循环其值或键和值。

4 个答案:

答案 0 :(得分:1)

这将是对象文字的无效语法。

您可以尝试:

var a = {};
var category_keys = ['font','color'];

for (var i = 0; i < category_keys.Length; i++) {
   a[category_keys[i]] =  "font-size: 15px; color: black;";
}

参考:Object Initializer

答案 1 :(得分:1)

也许你的意思是这样的。它需要两个数组。用于生成对象的键之一和另一个值。很像php array_combine函数

function arrayCombine( keys, values ){
  if( keys.length !== values.length ){
    throw new Error('keys and values must have the same length');
  }
  // object to return
  var obj = {};
  // loop through the keys and value.
  for( var ii = 0, ll = keys.length; ii < ll; ii++ ){
    obj[ keys[ii] ] = values[ ii ];
  }
  return obj;
}
  
var myObj = arrayCombine( ['my-key'], ['font-size: 15px; color: black;'] ),
    // with multiple keys and values
    otherObj = arrayCombine(['foo', 'bar'], ['foo value', 'bar value']);
  
console.log( myObj );
console.log( otherObj );
<script src="http://codepen.io/synthet1c/pen/WrQapG.js"></script>

这是一个使用函数js主体来保存一些重复的不同版本。

// this is a functional style function that will curry the styles
// and allow you to pass in multiple keys that have those same styles
function fontStyle( styles, keys ){
  return keys
    ? _fontStyle(keys)
    : _fontStyle;
  // helper function that does the work
  function _fontStyle( keys ){
    return keys.reduce(function( obj, key ){
      // styles is available from the parent functions scope
      obj[ key ] = styles;
      return obj;
    }, {} );
  }
}

var yourObject = { defaults: {} };

// create your specific font style functions these can be called like `pStyle('key')`
var pStyle  = fontStyle('font-size:1em;color:#111'),
    h1Style = fontStyle('font-size:2em;line-height:3em');

console.log( 'this is the actual function', pStyle );

$.extend(yourObject.defaults,
   // run the font style functions passing in the keys      
   pStyle(['content', 'paragraph']),
   pStyle(['text']),
   h1Style(['heading', 'title']),
   // you can even call the functions without initializing them
   fontStyle('font-size:1em;color:red')(['link']),
   fontStyle('font-size:3em;color:#3cf', ['big', 'huge'])
);

console.log( yourObject );
<script src="http://codepen.io/synthet1c/pen/WrQapG.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 2 :(得分:0)

确保定义了category_keys,例如:

var category_keys=["key1","key2","key3"];

定义itemKeys:

var itemKeys={};

运行此循环,更改&#34;值&#34;无论你想要什么:

for (var i=0;i<category_keys.length; i++)
  itemKeys[category_keys[i]]={value:"font-size: 15px; color: black;"};

访问值:

var anyvar=itemKeys["key1"].value;

*使用&#34;长度&#34;,不是&#34;长度&#34;

答案 3 :(得分:0)

如果你从我的理解中尝试重命名键同时保持值相同,这应该可行。 reduce函数迭代&#34;键的每个元素&#34;数组,使用回调的返回值作为传入的值为&#34; prev&#34;每次连续调用(以{}开头)。

var keys=["key1","key2","key3"] 

var itemKeyVals = {
    "dropdown name 1": "font-size: 15px; color: black;",
    "dropdown name 2": "font-size: 15px; color: black;"
}
// Get array of the keys we would like to replace
var itemKeys = Object.keys(itemKeyVals);

var newObj = keys.reduce( function(prev, curr, index, arr){ 
    // if no more keys to replace return new generated dict
    if (!itemKeys[index]) return prev;
    // assign to key Val in new dict the value of the old dict
    prev[curr] = itemKeyVals[itemKeys[index]];
    return prev;
}, {});