好的,我有一个对象的搜索结果数组,其中对象属性值(显示值)之一与搜索匹配。该数组的结构如下,可以包含任意数量的不同对象:
results = [
{
day: value,
time: value,
show: value,
sid: value,
network: value,
title: value,
ep: value,
link: value,
}
];
我试图将所有结果合并到一个大对象中,合并具有相同值的任何日期或时间。然而,我不能简单地独立地看待每一天或每一时间的值(value)。例如,如果周二也有晚上 9:00,我需要保留周一晚上 9:00。
为此,我尝试创建一个新的对象结构,如下所示:
for ( var i=0; i<results.length; i++ ) {
var uniqtime = results[i]["time"];
var uniqshow = results[i].show;
uniqresults[results[i].day] = {
uniqtime: {
uniqshow: {
sid: results[i].sid,
network: results[i].network,
title: results[i]["title"],
ep: results[i].ep,
link: results[i]["link"]
}
}
};
}
但显然这不起作用,因为变量子对象键名称被视为字符串。
如果我尝试像这样创建变量子对象/键:
for ( var i=0; i<obj.length; i++ ) {
uniqresults[results[i].day] = {};
uniqresults[results[i].day][results[i]["time"]] = {};
uniqresults[results[i].day][results[i]["time"]][results[i].show] = {
sid: obj[i].sid,
network: results[i].network,
title: results[i]["title"],
ep: results[i].ep,
link: results[i]["link"]
};
}
我确实可以创建正确的键名称,但我被迫声明一个空对象来定义每个键 (uniqresults[obj[i].day] = {}
& uniqresults[ obj[i].day][obj[i]["时间"]] = {}
)。如果我不这样声明,它不会让我插入我需要的其他子键/值。但是,这样声明不允许我正确合并结果数组,因为每次读取新结果对象时我基本上都会清空子键名称!
也许我让事情变得比应有的更复杂了。也许有一种更简单的方法或者下划线或 jquery 可以简化我手头的任务。无论如何,我目前非常渴望找到一个合适的解决方案。
最佳答案
似乎您可以在重新定义这些对象时使用条件检查。
var day, time;
for ( var i=0; i<obj.length; i++ ) {
// Instantiate the day reference if it doesn't exist
day = uniqresults[results[i].day] = uniqresults[results[i].day] || {};
// Instantiate the time reference if it doesn't exist
time = day[results[i].time] = day[results[i].time] || {};
time[results[i].show] = {
sid: obj[i].sid,
network: results[i].network,
title: results[i]["title"],
ep: results[i].ep,
link: results[i]["link"]
};
}
干杯!
关于javascript - 如何创建对象的可变对象键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17902565/