簡體   English   中英

使用 Ramda 從數組數組中刪除數組?

[英]Remove array from array of arrays using Ramda?

是否有任何速記選項可以使用 Ramda 庫從數組數組中刪除數組?

Items to remove: [[1, 2], [a, b]]
Remove from: [[g, d], [5, 11], [1, 2], [43, 4], [a, b]]

Result: [[g, d], [5, 11], [43, 4]]

使用R.differenceR.flip

 const data = [['g', 'd'], [5, 11], [1, 2], [43, 4], ['a', 'b']] const itemsToRemove = [[1, 2], ['a', 'b']] const fn = R.flip(R.difference)(itemsToRemove); console.log(fn(data))
 <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>

R.rejectR.eitherR.equals 的組合可以實現這一點。

 const data = [['g', 'd'], [5, 11], [1, 2], [43, 4], ['a', 'b']] const fn = R.reject(R.either(R.equals(['a', 'b']), R.equals([1, 2]))) console.log(fn(data))
 <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>

這可能是最好的答案

使用R.rejectR.contains

var Itemstoremove =  [[1, 2], [a, b]]
var Removefrom =  [[g, d], [5, 11], [1, 2], [43, 4], [a, b]]

var Result = R.reject(R.contains(R.__, Itemstoremove), Removefrom)

console.log(Result)

使用 vanilla JavaScript,您可以復制兩個數組中的每一個,使用.map()返回數組元素的string表示形式。

然后遍歷您的可移動項目數組並使用indexOf()檢查您復制的數組中每個項目是否存在。

這是您的代碼應該如何:

var arr = [["g", "d"], [5, 11], [1, 2], [43, 4], ["a", "b"]];
var strArr = arr.map(function(a){
    return a.join(",");
});
 var toRemove = [[1, 2], ["a", "b"]];
 var strToRemove = toRemove.map(function(el){
    return el.join(",");
 });

strToRemove.forEach(function(a){
    if(strArr.indexOf(a)>-1){
        arr.splice(strArr.indexOf(a), 1);
        strArr.splice(strArr.indexOf(a), 1);
    }
});

演示:

 var arr = [ ["g", "d"], [5, 11], [1, 2], [43, 4], ["a", "b"] ]; var strArr = arr.map(function(a) { return a.join(","); }); var toRemove = [ [1, 2], ["a", "b"] ]; var strToRemove = toRemove.map(function(el) { return el.join(","); }); strToRemove.forEach(function(a) { if (strArr.indexOf(a) > -1) { arr.splice(strArr.indexOf(a), 1); strArr.splice(strArr.indexOf(a), 1); } }); console.log(arr);

只需使用以下代碼行:

 const data = [ ['g', 'd'], [5, 11], [1, 2], [43, 4], ['a', 'b'] ] const itemsToRemove = [ [1, 2], ['a', 'b'] ]; console.log(R.difference(data, itemsToRemove));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM