亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js數組處理,拼接

js數組處理,拼接

小怪獸愛吃肉 2018-08-13 10:09:24
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
查看完整描述

1 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

問題簡單來說就是在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;
});

代碼還有更多優化的空間,大體思路如此。


想了下換了一種思路做,先找到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;
});



查看完整回答
反對 回復 2018-09-23
  • 1 回答
  • 0 關注
  • 495 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號