意外的令牌{当使用.map将对象添加到数组时

时间:2015-08-01 22:39:32

标签: javascript arrays object dictionary

var $scope={};
var componentsDir="/root/";
var appPrefix="/app/";


var scriptRef=[];
function proDir(scriptName){
    return componentsDir+appPrefix+'-home-components/pro/js/'+scriptName+'.js';
};

var scriptList =[
            {s_name:'jquery',file:"jquery.js"},
            {s_name:'bootstrap',file:"bootstrap.min.js"},
            {s_name:'easing',file:"jquery.easing.min.js"},
            {s_name:'fittext',file:"jquery.fittext.js"},
            {s_name:'wow',file:"wow.min.js"},
            {s_name:'creative', file:"creative.js"},

            /*{bootstrap :"bootstrap.min.js"},
            {easing :"jquery.easing.min.js"},
            {fittext :"jquery.fittext.js"},
            {wow :"wow.min.js"},
            {creative :"creative.js"},*/
        ]



var newscript = scriptList.map(function(scriptItem){
    console.log(scriptItem)
    return {{scriptItem.s_name:'jquery'},{scriptItem.file:proDir(scriptItem.file)}},
});

console.log(newscript)

我试图找到一种循环遍历脚本列表的方法,并使用.map为每个元素添加额外的目录信息。但是它让我对

的错误感到困惑
Uncaught SyntaxError: Unexpected token {

我尝试将每个元素作为新newscript数组

的对象返回

对此问题的任何暗示都会有所帮助。

3 个答案:

答案 0 :(得分:2)

{不是JSON中{之后的有效字符。

替换此行:

return {{scriptItem.s_name:'jquery'},{scriptItem.file:proDir(scriptItem.file)}}

这一行:

return {"scriptItem.s_name": 'jquery', "scriptItem.file": proDir(scriptItem.file)}

或其他变体可能是:

return {
    scriptItem: {
        s_name: 'jquery',
        file: proDir(scriptItem.file)
    }
};

以下是您对评论所要求的变体“我想要访问新闻稿的位置值,如下所示: newscript.jquery

var newscript = scriptList.map(function(scriptItem) {
    var returnval = {};
    returnval[ scriptItem.s_name ] = scriptItem.file;
    return returnval;
});

我认为你正在反对这个问题:

How can i name object "keys" programmatically in JavaScript?

如有疑问:

http://jsonlint.com/

答案 1 :(得分:0)

map()方法创建一个新数组,其结果是在此数组中的每个元素上调用提供的函数。

这意味着每个map迭代中的scriptItem变量都是scriptList数组中的对象之一。 Map()对该变量进行操作,并返回一个新变量,该变量将被推送到一个新的数组中,即scriptItem将指向该变量。

在您的代码中,您将返回2个对象,而不是一个。但是每个数组元素只能包含一个对象。所以,只返回一件事。

var newscript = scriptList.map(function(scriptItem){
    console.log(scriptItem)
    return {s_name:'jquery', file:proDir(scriptItem.file)}
});

答案 2 :(得分:0)

这应该为你做的工作:

var newscript = scriptList.map(function(scriptItem){
    console.log(scriptItem);
    var name = scriptItem.s_name;
    var file = proDir(scriptItem.file);
    return {s_name: name, file:file}
});