[英]Remove array from array of arrays using Ramda?
Is there any shorthand option to remove array from array of arrays using Ramda library ?是否有任何速记选项可以使用 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]]
Use R.difference with R.flip :使用R.difference和R.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>
A combination of R.reject , R.either and R.equals can achieve this. R.reject 、 R.either和R.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>
This is probably the best answer这可能是最好的答案
use R.reject and R.contains使用R.reject和R.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)
With vanilla JavaScript, you can make a copy of each of your two arrays, with .map()
returning a string
representation of your array elements.使用 vanilla JavaScript,您可以复制两个数组中的每一个,使用.map()
返回数组元素的string
表示形式。
Then loop over your removable items array and check with indexOf()
over the existence of each item in your copied array.然后遍历您的可移动项目数组并使用indexOf()
检查您复制的数组中每个项目是否存在。
This is how should be your code:这是您的代码应该如何:
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);
}
});
Demo:演示:
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);
Just use following lines of code:只需使用以下代码行:
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.