jQuery 在多维数组中查找/设置对象时遇到问题
jQuery trouble finding / setting objects in multi dimensional array
我正在尝试使用 jquery 循环选择并根据以下值创建一个二维数组:
使用我想要的输出下方的代码将如下所示:
object {Monday => hours[0] = '1a-2a',hours[1] = '2a-3a', Tuesday => hours[0] = '4p-5p', hours[1] = '5p-6p'}
假设我的 .each
选择器看起来像这样:
<ol id='selectable'>
<li data-day='Monday' data-time='1a-2a' class='ui-selected'></li>
<li data-day='Monday' data-time='2a-3a' class='ui-selected'></li>
<li data-day='Tuesday' data-time='4p-5p' class='ui-selected'></li>
<li data-day='Tuesday' data-time='5p-6p' class='ui-selected'></li>
</ol>
我正在尝试使用下面的代码来获得我想要的输出,但我一直收到错误消息:
"TypeError: Cannot use 'in' operator to search for 'hours' in undefined(…)"
var days = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var selection = [];
var i;
for (i = 0; i < days.length; ++i) {
$( ".ui-selected", "#selectable" ).each(function() {
if($(this).attr( 'data-day' ) == days[i]){
if(!(days[i] in selection)){
selection.push(days[i]);
if(!("hours" in selection[days[i]])){
selection[days[i]] = {hours:[]};
}
}
selection[days[i]]['hours'].push($(this).attr( 'data-time' ));
}
});
console.log(selection);
}
知道我做错了什么吗?
你需要 selection
是一个对象,而不是一个数组,像这样:
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var selection = {};
var i;
for (i = 0; i < days.length; ++i) {
$( ".ui-selected", "#selectable" ).each(function() {
if($(this).data( 'day' ) == days[i]){
if(!(days[i] in selection)){
selection[days[i]] = {};
if(!("hours" in selection[days[i]])){
selection[days[i]] = {hours:[]};
}
}
selection[days[i]]['hours'].push($(this).data( 'time' ));
}
});
console.log(selection);
}
在这里 fiddle 工作:https://jsfiddle.net/wehdnm20/1/
我正在尝试使用 jquery 循环选择并根据以下值创建一个二维数组:
使用我想要的输出下方的代码将如下所示:
object {Monday => hours[0] = '1a-2a',hours[1] = '2a-3a', Tuesday => hours[0] = '4p-5p', hours[1] = '5p-6p'}
假设我的 .each
选择器看起来像这样:
<ol id='selectable'>
<li data-day='Monday' data-time='1a-2a' class='ui-selected'></li>
<li data-day='Monday' data-time='2a-3a' class='ui-selected'></li>
<li data-day='Tuesday' data-time='4p-5p' class='ui-selected'></li>
<li data-day='Tuesday' data-time='5p-6p' class='ui-selected'></li>
</ol>
我正在尝试使用下面的代码来获得我想要的输出,但我一直收到错误消息:
"TypeError: Cannot use 'in' operator to search for 'hours' in undefined(…)"
var days = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var selection = [];
var i;
for (i = 0; i < days.length; ++i) {
$( ".ui-selected", "#selectable" ).each(function() {
if($(this).attr( 'data-day' ) == days[i]){
if(!(days[i] in selection)){
selection.push(days[i]);
if(!("hours" in selection[days[i]])){
selection[days[i]] = {hours:[]};
}
}
selection[days[i]]['hours'].push($(this).attr( 'data-time' ));
}
});
console.log(selection);
}
知道我做错了什么吗?
你需要 selection
是一个对象,而不是一个数组,像这样:
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var selection = {};
var i;
for (i = 0; i < days.length; ++i) {
$( ".ui-selected", "#selectable" ).each(function() {
if($(this).data( 'day' ) == days[i]){
if(!(days[i] in selection)){
selection[days[i]] = {};
if(!("hours" in selection[days[i]])){
selection[days[i]] = {hours:[]};
}
}
selection[days[i]]['hours'].push($(this).data( 'time' ));
}
});
console.log(selection);
}
在这里 fiddle 工作:https://jsfiddle.net/wehdnm20/1/