我想将以下有效负载传递给API
params[field1]: value1
params[field2]: value1
....
params[fieldN]: valueN
我有来自对象的字段和值。
var params = {};
jQuery.each($scope.linkParams, function(a, b) {
params.params[a] = b; // returns undefined variable error
// I also tried other options but all result in one or another error
// Some doesn't result into an erro but doesn't get merged. See below merge requirement
});
我还想将上面创建的对象与
合并到另一个对象jQuery.extend(extraParams, params);
如何实现所获得的对象?
更新
$scope.linkParams = {
field1: 'value1',
field2: 'value2',
....
};
答案 0 :(得分:0)
你有两个问题,所以我会一次解决一个问题。
(对于TL; DR,我对解决方案文本进行了大胆处理。但希望其余部分值得阅读。)
如果我有一个JS对象,我实例化如下:
var cat = {
'meow': 'loud',
'type': 'Persian',
'sex': 'male'
}
那么你可以免费获得属性参考。也就是说,您可以说cat.meow
之类的东西,并且您的运行时环境将理解这一点。但是,JS不会自动创建您引用的对象的属性不存在,除非您引用它们来创建它们。
cat.health = 'meek'
可行,但cat.ears[0] = 'pointy'
不会。
var cat = {
'meow': 'loud',
'type': 'Persian',
'sex': 'male'
}
cat.health = 'meek'
alert(cat.health)
cat.ears[0] = 'pointy'
alert(cat.ears[0])
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
您会注意到第一个警报发生并包含预期值,但第二个警报永远不会出现。这是因为代码在cat.ears[0] = 'pointy'
的行上失败,并且在那时停止执行。
这似乎与我刚才所说的相矛盾,但仔细观察正在发生的事情。当我们尝试初始化cat.ears
的第一个元素时,我们必须引用不存在的cat.ears
属性。
JS实现不会假设你想要永久地创建链上的项目,这可能是设计 - 如果它没有抛出错误,而只是创建了任何需要存在的属性或对象,以便你的通过语法合理的程序,当许多软件未能包含所需的库时,它们会默默地破坏。如果您忘记包含JQuery,它只需创建一个$
,一个JQuery
变量,以及您在代码中引用的那些对象的所有属性。这是一个适当的混乱调试。
简而言之,这就是你 - 可能是偶然的 - 假设会在这里工作。 params.params
类似于上例中的cat.ears
。您可能有一些理由这样做,但假设您没有这样做,如果您只是将params.params[a]
更改为params[a]
,您的代码就会起作用。
假设extraParams
是一个有效的数组/对象,您编写的代码一旦params
不再破坏您的代码,然而: 请注意,这会修改您的extraParams
对象。如果您希望新对象同时包含params
和extraParams
,会更像:
var args = $.extend({}, params, extraParams)
这将修改一个空对象并添加params
和extraParams
的内容。有关详细信息,请参阅the JQuery documentation。
答案 1 :(得分:0)
一些操作和我能够达到所需的结果。 我发布了代码以供进一步参考:
var d = {};
jQuery.each($scope.linkParams, function(a,b) {
a = "params[" + a + "]";
d[a] = b;
});
jQuery.extend(extraParams, d);