$.extend() = 与服务器循环一起使用时不扩展
$.extend() = not extending when used with server loop
我正在尝试创建 2 个空白对象,运行一个填充其中 1 个的 php 循环,然后将这些对象一起扩展......最终创建 1 个包含许多对象的对象。
这是逻辑/代码(注意,服务器的东西是专有的,但它运行在php并且工作正常):
var allUsers = {};
var singleUser = {};
$(document).ready(function(){
<fm:UserList
fields="id,firstname,lastname,geo_latitude,geo_longitude,meta,externalids"
>
<fm:Loop>
singleUser = {
'index' : '{$loop.index}',
'id' : '{$user.id}',
'firstname' : '{$user.firstname}',
'lastname' : '{$user.lastname}',
'geo_latitude' : '{$user.geo_latitude}',
'geo_longitude' : '{$user.geo_longitude}',
'company' : '{$user.meta.company}',
'twitter' : '{$user.meta.twitter}',
'externalprovider' : '{$user.externalids.0.external_id_provider}',
'externalid' : '{$user.externalids.0.external_parsed_id}'
}
/* Merge singleUser into allUsers */
$.extend(allUsers,singleUser);
</fm:Loop>
</fm:UserList>
console.log(allUsers);
});
以下是放在页面上的内容:
var allUsers = {};
var setUser = {};
$(document).ready(function(){
setUser = {
'index' : '0',
'id' : '1930039',
'firstname' : 'Devo',
'lastname' : 'Brown',
'geo_latitude' : '-46.81610453612681',
'geo_longitude' : '-70.6640625',
'company' : 'Filemobile',
'twitter' : 'devinbrownca',
'externalprovider' : '',
'externalid' : ''
}
/* Merge setUser into passed allUsers */
$.extend(allUsers,setUser);
setUser = {
'index' : '1',
'id' : '1930025',
'firstname' : 'Aidan',
'lastname' : 'Roach',
'geo_latitude' : '51.032184898096396',
'geo_longitude' : '-108.6328125',
'company' : '',
'twitter' : '',
'externalprovider' : '',
'externalid' : ''
}
/* Merge setUser into passed allUsers */
$.extend(allUsers,setUser);
setUser = {
'index' : '2',
'id' : '1930024',
'firstname' : 'Devin',
'lastname' : 'Brown ',
'geo_latitude' : '42.89743256946478',
'geo_longitude' : '-101.6015625',
'company' : '',
'twitter' : '',
'externalprovider' : '',
'externalid' : ''
}
/* Merge setUser into passed allUsers */
$.extend(allUsers,setUser);
console.log(allUsers);
});
在函数结束时,控制台仅记录单个对象,即创建的最后一个对象。
知道我做错了什么吗?
$.extend
将一个对象的属性复制到另一个对象。
我想你需要一个数组
var allUsers = [];
/* Push singleUser into allUsers */
allUsers.push(singleUser);
$.extend 的作用是将两个或多个对象的内容(字段)合并到第一个对象中。似乎所有用户不应该是一个哈希(对象),而是一个数组。因此,您需要将用户推入其中:
var allUsers = [];
allUsers.push(singleUser);
此行为正是extend
所做的。 setUser
对象的任何新属性都会添加到allUsers
,但现有属性会被覆盖。例如:
setUser = {
'firstname' : 'Devo',
'index' : '0',
}
$.extend(allUsers,setUser);
setUser = {
'index' : '1',
'id' : '1930039'
}
$.extend(allUsers,setUser);
将生成以下对象:
allUsers = {
'firstname' : 'Devo',
'index' : '1',
'id' : '1930039'
}
所以,问题是:希望这段代码做什么?
如果您只想跟踪所有用户,您可能只想保留一个setUser
对象的数组,如下所示:
allUsers = [
{
'id':'0',
...
},
{
'id':'1',
...
},
{
'id':'2',
...
}
];
您可以通过将每个setUser
对象推送到allUsers
数组中来实现这一点,如下所示:
allUsers = [];
setUser = {...};
allUsers.push(setUser);
但是,如果您希望一个allUsers
对象,其中包含每个属性的值数组,如下所示:
allUsers = {
'firstname' : ['Devo', 'Aidan'],
'index' : ['0','1'],
...
}
您需要滚动自己的函数。
问题的另一种解决方案可能是将allUsers
保留为对象,但对每个用户对象使用键:
allUsers = {
'1930039' = {
'index' : '0',
'firstname' : 'Devo',
'lastname' : 'Brown',
...
},
'1930025' = {
'index' : '1',
'firstname' : 'Aidan',
'lastname' : 'Roach',
...
},
...
}
var allUsers = [];
var singleUser = {};
$(document).ready(function(){
<fm:UserList
fields="id,firstname,lastname,geo_latitude,geo_longitude,meta,externalids"
geo="notnull"
>
<fm:Loop>
singleUser = {
'index' : '{$loop.index}',
'id' : '{$user.id}',
'firstname' : '{$user.firstname}',
'lastname' : '{$user.lastname}',
'geo_latitude' : '{$user.geo_latitude}',
'geo_longitude' : '{$user.geo_longitude}',
'company' : '{$user.meta.company}',
'twitter' : '{$user.meta.twitter}',
'externalprovider' : '{$user.externalids.0.external_id_provider}',
'externalid' : '{$user.externalids.0.external_parsed_id}'
}
/* push singleUser object into allUsers array */
allUsers.push(singleUser);
</fm:Loop>
</fm:UserList>
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- 扩展移相器按钮类不工作
- chrome扩展中的navigator.geolocation.getCurrentPosition
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- chrome扩展更改主机/域警告
- 转义符不能与innerHTML一起使用
- TableExport jquery插件:文件名和扩展名问题
- 如何在chrome扩展中重定向到html页面
- Chrome扩展没有't在重新加载之前考虑期权价值
- 扩展SVGTextElement时出现Typescript Uncaught TypeError
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- 是否可以将多个Chrome扩展程序打包在一起
- 如何分发原生Windows DLL以与XUL Firefox扩展中的js-ctypes一起使用
- 将geojson数据与AngularJS可扩展UI-grid一起使用
- $.extend() = 与服务器循环一起使用时不扩展
- 如何将OAuth2客户端id与chrome扩展文件一起分发
- 如何让chrome扩展热键与gmail,雅虎邮件等一起工作
- Jquery扩展BeautyTips不能与动态ajaxPath选项一起工作
- 美元.扩展不能与数组和in对象一起工作
- 将jQuery与内容脚本和Chrome扩展一起使用