Javascript:如何根据与该对象关联的String访问对象?

时间:2015-02-04 22:42:10

标签: javascript arrays facebook facebook-graph-api object

我是JavaScript的新手,我正在尝试制作一个使用Facebook API的应用。我遇到的问题是我有一个专门用于保存不同人的一些信息的课程(这些信息之一是字符串形式的人的Facebook ID。)我的目标是从中访问特定对象这些人的ArrayList只知道与该对象关联的Facebook ID。有没有人有任何想法?

5 个答案:

答案 0 :(得分:0)

您可以创建一个函数,如果它在数组中,则返回person对象,否则返回false:

var userArray = [{/* user1 */}, {id:'123',/* Brian */},{/* user3 */}];

function getUserById(id){
  for(var i=0, l=userArray.length; i<l; i++){
    if(ArrayList[i]['id'] == id) return userArray[i];
  }
  return false;
}

然后像这样使用它:

var Brian = getUserById('123');

答案 1 :(得分:0)

通过数字索引访问数组到数组中,并且数组针对索引从零开始的数据序列进行优化。这听起来并不像你真正想要的那样。

如果您希望能够通过Facebook ID进行索引,那么您可能希望使用对象(而不是数组)并将Facebook ID设置为您可以通过其设置和从对象获取项目的键。 / p>

var users = {};

function addUser(facebookID, properties) {
    // save properties object for a given facebookID user
    users[facebookID] = properties;
}

function getUser(facebookID) {
    // return properties object for a given facebookID user
    return users[facebookID];
}

答案 2 :(得分:0)

Javascript没有ArrayList类。如果您坚持使用数组中的对象,那么您可以做的最好的事情就是迭代数组,或者使用带有回调函数的array.filter: http://devdocs.io/javascript/global_objects/array/filter

答案 3 :(得分:0)

如果你仍然想要使用数组,你必须有这样的东西,尽管我喜欢mapApproach:

ArrayApproach:

facebookIds = ["123", "2413", "1234"];
facebookObjects = [ObjFor123, ObjFor2413, ObjFor1234];
function getObjectById(id) {
    var index = facebookIds.indexOf(id);
    if(index != -1) {
        return facebookObjects[index];
    }
}

MapApproach:

var facebookMap = {
     "id1": Obj1,
     "id2": Obj2
};

function getObjById(x) {
    return facebookMap[x];
}

答案 4 :(得分:0)

您正在尝试在数组中搜索某个项目,如果该项目存在,则返回该项目。假设您的列表未排序,实现此目的的最简单方法是使用linear search

function fetchItem(array, prop, value) {
  for (var i = 0; i < array.length; ++i) {
    if (array[i][prop] === value)
      return array[i];
  }
  return undefined;
}

// search an array "userArray" for an item whose facebookId property is "12345"
fetchItem(userArray, facebookId, "12345"); // returns user object or undefined

如果您在阵列中存储了大量用户对象,这可能会很慢。如果您的对象出现在数组的最后,则该函数必须在返回结果之前检查数组中的每个项目。

最好将用户存储在Object等数据结构中。您可以存储键/值对,其中键等于唯一标识符,如facebookId,值是用户对象的其余部分:

var userCollection = {
  "12345": { name: 'foo' },
  "12346": { name: 'bar' },
  "12347": { name: 'baz' }
};

假设您已经知道正在寻找其所有者的facebookId,您可以直接检索用户对象,而无需搜索任何内容:

userCollection["12346"]; // { name: 'bar' }

Object类比Array更适合存储和访问无序集合。