一个渣渣辉 2020-07-02 20:04 采纳率: 12.5%
浏览 500
已采纳

js数组对象合并与拆分求助

var arr=[
    {type:1,word:["this"]},
    {type:1,word:["is"]},
    {type:1,word:["my"]},
    {type:0,word:["or"]},
    {type:0,word:["this"]},
    {type:4,word:["aaa"]},
    {type:4,word:["bbb"]},
    {type:4,word:["ccc"]},
]

一:type不等于0的合并为(不挨在一起不可以合并)

arr=[
    {type:1,word:["this","is","my"]},,
    {type:0,word:["or"]},
    {type:0,word:["this"]},
    {type:4,word:["aaa","bbb","ccc]},
    {type:1,word:["wei"]},
]

二:将一的type等于1的变为0后数组变成(这相当于有个按钮,取消选中,然后将一的结果变为二)

arr=[
    {type:0,word:["this"]},
    {type:0,word:["is"]},
    {type:0,word:["my"]},
    {type:0,word:["or"]},
    {type:0,word:["this"]},
    {type:4,word:["aaa","bbb","ccc]},
    {type:1,word:["wei"]},
]

下面是我项目需求图片(可以不看)
图片说明


图片说明

  • 写回答

1条回答 默认 最新

  • 前端-小书童 2020-07-03 10:20
    关注
    /**
             * @param {number[][]} list
             * @param {number} k
             * @return {number}
             */
            var kthSmallest = function (list, k) {
                // k 为1:type不等于0的合并为(不挨在一起不可以合并)
                // k 为2:将一的type等于1的变为0后数组变成
    
                // 因为会多次调用,直接修改传进来的数组可能会影响到下次调用,则需要声明一个数组来作为基准数组
                let arr = JSON.parse(JSON.stringify(list));
                let _result = [];
                let len = arr.length, i = 0;
                if (k === 1) {
                    while (i < len) {
                        // 指针在当前这个arr元素中,此时结果数组的长度,用户比较这个子集的type是不是和上面一个一样即碍着
                        let resultLen = _result.length;
                        if (arr[i].type === 0 || resultLen === 0) {
                            // 等于0的不合并,直接放到数组最后面
                            // 第一个元素也直接放入
                            _result.push(arr[i])
                        } else if (_result[resultLen - 1].type === arr[i].type) {
                            // 如果挨在一起合并word
                            arr[i].word.forEach(i => _result[resultLen - 1].word.push(i));
                        } else {
                            // 不属于上面的情况,直接放到数组最后面
                            _result.push(arr[i])
                        }
                        i++
                    }
                } else {
                    _result = arr.map(i => {
                        i.type === 1 ? i.type = 0 : i
                        return i
                    })
                }
                return _result
    
            };
    

    var arr = [
    { type: 1, word: ["this"] },
    { type: 1, word: ["is"] },
    { type: 1, word: ["my"] },
    { type: 0, word: ["or"] },
    { type: 0, word: ["this"] },
    { type: 4, word: ["aaa"] },
    { type: 4, word: ["bbb"] },
    { type: 4, word: ["ccc"] },
    ];
    console.log(kthSmallest(arr, 1)
    console.log(kthSmallest(arr, 2))

        不知道上面的逻辑是不是你想要的,另外按照我理解的,感觉这个逻辑其实不是很难呢,哈哈哈,如果有问题请给我留言
        另外,不好意思借机推下自己的公众号:**坑人的小书童**,哈哈哈 ,每天更新一道算法题,感兴趣可以一块坚持学习哦
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 6月15日

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化