创建列表对象数组不正确

时间:2015-05-05 17:43:44

标签: javascript arrays

任何人都可以告诉我为什么这个脚本不能正常工作以及如何解决它?

问题是当使用alert()调试存储的值时,对于buyerGuideData ["英语"]语言,数据以西班牙语而不是英语出现。语言。

var enumLanguage = { English: 'English', Spanish: 'Spanish' }
var buyersGuideData = [];
var foo = { Language: '', WarrantyFlag: 'No' }

//Build list array of objects...
buyersGuideData[enumLanguage.English] = foo;
buyersGuideData[enumLanguage.English].Language = "English";
buyersGuideData[enumLanguage.Spanish] = foo;
buyersGuideData[enumLanguage.Spanish].Language = "Spanish";

alert(buyersGuideData[enumLanguage.English].Language);  //Output was displayed as "Spanish", not English...
alert(buyersGuideData[enumLanguage.Spanish].Language);  //Output was displayed as "Spanish"...

[编辑 - 新例子] - 这是你的意思吗?

buyersGuideData[enumLanguage.English] = { Language: '', WarrantyFlag: 'No' }
buyersGuideData[enumLangauge.Spanish] = { Langauge: '', WarrantyFlag: 'No' }

buyersGuideData[enumLanguage.English].Language = "English";
buyersGuideData[enumLangauge.Spanish].Language = "Spanish";

3 个答案:

答案 0 :(得分:2)

只需将函数用作对象生成器即可解决此问题。用这样的foo函数替换foo对象

var foo = function () {
    return {
        Language: '',
        WarrantyFlag: 'No'
    };
}

然后更改分配对象的方式

buyersGuideData[enumLanguage.English] = foo();
buyersGuideData[enumLanguage.English].Language = "English";
buyersGuideData[enumLanguage.Spanish] = foo();
buyersGuideData[enumLanguage.Spanish].Language = "Spanish";

每次调用foo时都会实例化一个全新的对象。在您的示例中,您使用的是同一个对象,这就是为什么显示不受欢迎的行为。

答案 1 :(得分:1)

您将同一个对象分配给两个不同的位置,然后两次修改该对象。

您需要的是两个不同的对象。创建它两次:

buyersGuideData[enumLanguage.English] = { ... }

如果您想从模板开始,可以使用merging

答案 2 :(得分:0)

您遇到语法错误:

alert(buyersGuideData[enumLanguage.English].Langauge);  //Output was displayed as "Spanish", not English...
alert(buyersGuideData[enumLanguage.Spanish].Langauge); 

Langauge错了,请尝试语言