我试图制作一个键,它的键来自一个数组。但是,如果我将对象名称用作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是什么,那么您可能知道如何循环其值或键和值。
答案 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;";
}
答案 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;
}, {});