Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
<script src="https://rawgithub.com/Ramda/ramda/master/ramda.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
  <pre id="output"></pre>
</body>
</html>
 
var log = (function() {
  var console = document.getElementById('output');
  return function(msg) {
    console.innerHTML += msg + "\n";
  };
}());
ramda.installTo(this);
var xs = [
    {x: {y: 1}}, 
    {x: {y: 2}}, 
    {x: {y: 3}}, 
    {x: {y: 4}}, 
    {x: {y: 1}}, 
    {x: {y: 4}}, 
    {x: {y: 5}}, 
    {x: {y: 6}}
];
    
log("=================================================");
log("original removeDuplicates");
log("=================================================");
    
function removeDuplicates(xs) {
    var i, ilen, prop, xObj = {};
    for (i = 0, ilen = xs.length; i < ilen; i++) {
        xObj[xs[i].x.y] = xs[i];
    }
    xs = []; // Yikes!
    for (prop in xObj) {
        if (xObj.hasOwnProperty(prop)) {
            xs.push(xObj[prop]);
        }
    }
    return xs;
}
log(JSON.stringify(removeDuplicates(xs), null, 4));
log("=================================================");
log("functional removeDuplicates");
log("=================================================");
function dedupe(predicate, list) {
    return foldl(function(acc, curr) {
        return (some(function(accElem) { return predicate(accElem, curr); }, acc)) ? 
            acc : 
            append(curr, acc);
    }, [], list);
}
   
function equalXs(objA, objB) {
    return objA.x.y === objB.x.y;
}
log(JSON.stringify(dedupe(equalXs, xs), null, 4));
log("=================================================");
log("simplified functional removeDuplicates");
log("=================================================");
function dedupe2(predicate, list) {
    return foldl(function(acc, current) {
        return (some(curry(predicate)(current), acc)) ? 
            acc : 
            append(current, acc);
    }, [], list);
}
   
function equalXs(objA, objB) {
    return objA.x.y === objB.x.y;
}
log(JSON.stringify(dedupe2(equalXs, xs), null, 4));
Output 300px

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers