选择'属性值'来自基于另一个属性值的数组'在javascript中

时间:2015-06-15 09:35:39

标签: javascript arrays

我有这样的数组。

var nodes = [{ID:"101", x:100, y:200}
        ,{ID:"102", x:200, y:200}
        ,{ID:"103", x:300, y:300}
        ,{ID:"104", x:200, y:300}];

我希望有一个函数将节点的ID作为输入并返回其(x,y)。 例如,函数coordinates(103)应该读取数组(节点)并在调用时返回x = 300,y = 300。任何指针都很受欢迎。谢谢 :)  这就是我到目前为止所拥有的。它有效,但我想知道更整洁,更整洁的方法。

function coordinates(id){
    for (var i=0 in nodes){
        if(nodes[i].ID == id){
            return { x: nodes[i].x, y: nodes[i].y};
        }
    }
}
console.log(coordinates(102));

5 个答案:

答案 0 :(得分:2)

见内联评论:

Demo



var nodes = [{
  ID: "101",
  x: 100,
  y: 200
}, {
  ID: "102",
  x: 200,
  y: 200
}, {
  ID: "103",
  x: 300,
  y: 300
}, {
  ID: "104",
  x: 200,
  y: 300
}];

var noOfCord = nodes.length;

var coordinates = function(id) {
  for (var i = 0; i < noOfCord; i++) {
    if (nodes[i].ID == id) {
      return {
        x: nodes[i].x,
        y: nodes[i].y
      };
    }
  }
}


document.write(coordinates(103).x + ', ' + coordinates(103).y);
&#13;
&#13;
&#13;

答案 1 :(得分:2)

你可以使用.filter,就像这样

var nodes = [{
    ID: "101",
    x: 100,
    y: 200
}, {
    ID: "102",
    x: 200,
    y: 200
}, {
    ID: "103",
    x: 300,
    y: 300
}, {
    ID: "104",
    x: 200,
    y: 300
}];

function coordinates(nodes, id) {
  var result = nodes.filter(function (el) {
      return +el.ID === id;    
  });
  
  if (result && result.length) {
    result = result[0];

    return {
       x: result.x,
       y: result.y
    };
  }
  
  return null;
}

console.log(coordinates(nodes, 103));

答案 2 :(得分:2)

基本上你正在看这样的事情

var f = function(id){
    var match = nodes.filter(function(d){ 
        return d.ID === id; 
    })
    return match && match.length && {x: match[0].x, y:match[0].y} 
    || {x: undefined, y: undefined};
};

然后f('101')输出{x: 100, y:200},如果找不到匹配,则会输出{x: undefined, y: undefined}

答案 3 :(得分:1)

使用数组filter,尝试:

&#13;
&#13;
function coordinates(id){
  return nodes.filter(function(e){ return e.ID == id })[0]
}

var nodes=[{ID:"101",x:100,y:200},{ID:"102",x:200,y:200},{ID:"103",x:300,y:300},{ID:"104",x:200,y:300}];

var result = coordinates("103");

document.write("<pre>" + JSON.stringify(result, null, 3));
&#13;
&#13;
&#13;

答案 4 :(得分:0)

这里有人提出具有具体JavaScript的精彩解决方案。所以我提出了另一个使用 underscore.js 的替代方案,以防你好奇。

function coordinates(id){
    var n = _.findWhere(nodes, {ID: id});
    return {x: n.x, y: n.y }
}