我有这样的对象功能:
$scope.createAuction = function () {
var auction = { auction: { langData: {} } };
if($scope.selected.tab === $scope.infoTabs[0]) {
auction.auction = {
type: 'car',
layout: $scope.selected.description
};
if(auction.auction.layout === 1) {
for(var i = 0, l = $scope.langInput.values.length; i < l; i++) {
/*
auction.auction.langData.push({
$scope.langInput.values.selected: {
name: $scope.inputs.auction_name_account[i + 1]
}
});
*/
console.log($scope.inputs.auction_name_account[i + 1]);
console.log($scope.langInput.values[i].selected);
}
}
}
console.log(JSON.stringify(auction));
}
$scope.langInput.values[i].selected
是pl
,eng
但用户可以更改它并添加新的或删除的。$scope.inputs.auction_name_account[i + 1]
是用户提供的上述语言的描述。此外,如果用户更改上述语言,他必须以他选择的语言提供描述。
控制台数据很好,但我不知道如何构建这个对象,所以在函数完成工作后,它看起来像这样:
{
"auction":{
"type":"account",
"layout":1
"langData":{
"pl":{
"name":"description in polish provided by user"
}
"eng":{
"name":"description in english provided by user"
}
}
}
}
我试图通过这个代码来构建它,/* ... */
但它不起作用给我语法错误。
好吧,我知道下面的这个 JSON 是上面的其他对象,但这并不重要,我稍后会使用 JSON.stringify() 我只有将对象绑定到 langData 对象时遇到问题。
编辑
正如@Patrick Evans 建议的那样,我已经更改了我的代码,因此我现在不再在代码中覆盖它:
$scope.createAuction = function () {
var auction = { auction: { langData: {} } };
if($scope.selected.tab === $scope.infoTabs[0]) {
Object.assign(auction.auction, {
type: 'account',
layout: $scope.selected.description
});
if(auction.auction.layout === 1) {
//alert($scope.langInput.values.length);
for(var i = 0, l = $scope.langInput.values.length; i < l; i++) {
auction.auction.langData.push({
$scope.langInput.values.selected: {
name: $scope.inputs.auction_name_account[i + 1]
}
});
console.log($scope.inputs.auction_name_account[i + 1]);
console.log($scope.langInput.values[i].selected);
}
}
}
if($scope.selected.tab === $scope.infoTabs[1]) {}
if($scope.selected.tab === $scope.infoTabs[2]) {}
console.log(JSON.stringify(auction));
}
我仍然收到语法错误:
未捕获的 SyntaxError: Unexpected token 。
从这一行
$scope.langInput.values.selected: {
我的 IDE 也在突出显示它并说
: 预期的。给予
你这样初始化auction
:
var auction = { auction: { langData: {} } };
但是您稍后会auction
通过执行以下操作来覆盖该属性
auction.auction = {
type: 'car',
layout: $scope.selected.description
};
这意味着 上不再有langData
属性auction.auction
。您可以重新创建该属性,或扩展该auction
属性保留已存在的任何先前属性。
//recreate the property
auction.auction = {
type: 'car',
layout: $scope.selected.description,
langData:{}
};
//or extend the property
Object.assign(auction.auction,{
type:'car',
layout:$scope.selected.description,
});
//or extend by explicitly setting each property
auction.auction.type = 'car';
auction.auction.layout = $scope.selected.description,
对于实际将数据放在 上langData
,这取决于您的意思。
如果它是一个对象,您可以将该变量用作属性访问器并以这种方式设置
//if you actually meant to use $scope.langInput.values.selected
auction.auction.langData[$scope.langInput.values[i].selected] = {
name: $scope.inputs.auction_name_account[i + 1]
};
//or if values is an array
let propName = $scope.langInput.values[i];
auction.auction.langData[propName] = {
name: $scope.inputs.auction_name_account[i + 1]
};
否则,如果它应该是一个数组,您需要将其更改为一个数组,然后您可以使用计算属性名称创建您的对象
auction.auction = {
type: 'car',
layout: $scope.selected.description,
langData:[] //<-- array instead of object
};
/*...*/
auction.auction.langData.push({
[$scope.langInput.values[i].selected]:{ //<--computed name syntax
name:$scope.inputs.auction_name_account[i + 1]
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句