javascript - js数组处理,拼接
怪我咯
怪我咯 2017-04-11 11:47:05
[JavaScript讨论组]
var hasInfoNodes=scope.nodedata=splitDatas.filter(function(element,index,array) {
                    
                    return ([7,13,17,23,30].indexOf(parseInt(element.nodeIndex)) > -1);
                    
                });

如代码,是从数组splitDatas中过滤出来我想要的几个对象,这里根据对象的nodexIndex 获取,[7,13,17,23,30],只要包含这个nodexIndex,就放进hasInfoNodes中。
现在问题来了,但是splitDatas中不一定完全有7,13,17,23,30这几个,那么,我该如何设置,当splitDatas中没有某个对象时候,比如,没有13,30设置其为

{nodeIndex:"13",nodeStatus:"0"}
{nodeIndex:"30",nodeStatus:"0"}
放进hasInfoNodes里面。而且最终要按照nodeIndex的大小排列好hasInfoNodes的对象呢,也就是,最终一定有[7,13,17,23,30]这个几个对象,这里面的数字就是对象的nodeIndex

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
大家讲道理

问题简单来说就是在splitDatas里面找和自定义数组arr[7,13,17,23,30]的交集,如果splitDatas没有的则使用arr进行填充。

所以我用arr来循环,然后找和splitDatas的交集,如果没有,则使用arr的值来填充,简单的说:求交集,给交集补数据。

//测试数据
var splitDatas = [
{ nodeIndex: "7", nodeStatus: "2" },
{ nodeIndex: "13", nodeStatus: "2" },
{ nodeIndex: "30", nodeStatus: "1" }
];

var hasInfoNodes = [13, 7, 23, 17, 30].map(function (value, i) {
    //两数组相交索引
    var index = -1;
    //在splitDatas中寻找arr当前项
    if (splitDatas.some(function (element, i) {
        if (+element.nodeIndex == value) {
            //找到了索引
            index = i;
            return true;
        }
    })) {
        //
        return splitDatas[index];
    }
    //数据格式统一
    return { nodeIndex: value + '', nodeStatus: "0" };
});
hasInfoNodes.sort(function (a, b) {
    return a.nodeIndex - b.nodeIndex;
});

代码还有更多优化的空间,大体思路如此。

---- update

想了下换了一种思路做,先找到arrsplitDatas的差集temp,然后把temp的格式和splitDatas对齐(转换成一致),再把tempsplitDatas连接,最终排序即可,简单的说:求差集,给差集补数据。

//测试数据
var splitDatas = [
{ nodeIndex: "7", nodeStatus: "2" },
{ nodeIndex: "13", nodeStatus: "2" },
{ nodeIndex: "30", nodeStatus: "1" }
];
var arr = [13, 7, 23, 17, 30];



//求出差集
var temp = arr.filter(function (value) {
    return !~splitDatas.findIndex(function (element) {//Array.prototype.findIndex from in ES2015
        return value == +element.nodeIndex;
    });
});
var hasInfoNodes = temp.map(function (value) {
    //把差集的格式转换成splitDatas一致的格式
    return { nodeIndex: value + '', nodeStatus: "0" };
}).concat(splitDatas);//两个数组连接

//排序
hasInfoNodes.sort(function (a, b) {
    return a.nodeIndex - b.nodeIndex;
});

PHPz

不知道你的splitDatas是什么样格式的,请你完善题目。

比如输入,输出各是什么样的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号