javascript - 如何创建对象的可变对象键?

标签 javascript jquery

好的,我有一个对象的搜索结果数组,其中对象属性值(显示值)之一与搜索匹配。该数组的结构如下,可以包含任意数量的不同对象:

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/

相关文章:

javascript - "fs.writefile"函数中的自定义文件名

javascript - $scope.$watch(var,function) undefined 不是函数

php - jquery 电子邮件表单 submitHandler 的问题

javascript - Ajax在php中发布 undefined index

javascript - 检查url hash是否存在

javascript - react JS |应用程序无法在 IOS 和 IE/Edge 上运行

javascript - 是否可以将数组从 onClick 传递给 javascript 函数?

javascript - 如何使用下一个上一个访问博主帖子链接列表

jquery - 使用 jQuery 更改缩略图点击时的图像源

javascript - 替换字符串中一个字符的多个实例