例如,我有:

var Data = [
  { id_list: 1, name: 'Nick', token: '312312' },
  { id_list: 2, name: 'John', token: '123123' },
]

然后,我想按名称(例如)对该对象进行排序/反转。然后我想要得到这样的东西:

var Data = [
  { id_list: 2, name: 'John', token: '123123' },
  { id_list: 1, name: 'Nick', token: '312312' },
]

现在我想知道对象的索引属性名称='John',以获得属性令牌的值。

我怎么解决这个问题?


当前回答

我所知道的唯一方法是遍历所有数组:

var index = -1;
for(var i=0; i<Data.length; i++)
  if(Data[i].name === "John") {
    index = i;
    break;
  }

或不区分大小写:

var index = -1;
for(var i=0; i<Data.length; i++)
  if(Data[i].name.toLowerCase() === "john") {
    index = i;
    break;
  }

结果变量index包含对象的索引,如果没有找到,则为-1。

其他回答

只需要遍历数组并找到位置:

var i = 0;
for(var item in Data) {
    if(Data[item].name == 'John')
        break;
    i++;
}
alert(i);

因为排序部分已经回答了。我将提出另一种优雅的方法来获取数组中属性的indexOf

你的例子是:

var Data = [
    {id_list:1, name:'Nick', token:'312312'},
    {id_list:2, name:'John', token:'123123'}
]

你可以:

var index = Data.map(function(e) { return e.name; }).indexOf('Nick');

var数据= [{ id_list: 1、 名称:“尼克”, 令牌:“312312” }, { id_list: 2 名称:“约翰”, 令牌:“123123” } ] var index = Data.map(函数(e) { 返回e.name; }) .indexOf(“尼克”); console.log(索引)

Array.prototype.map在Internet Explorer 7或Internet Explorer 8上不可用。ES5的兼容性

这里是ES6和箭头语法,这更简单:

const index = Data.map(e => e.name).indexOf('Nick');

如果你喜欢使用ES6,数组现在有了findIndex函数。这意味着你可以这样做:

const index = Data.findIndex(item => item.name === 'John');

一个典型的方法

(function(){
  if (!Array.prototype.indexOfPropertyValue){
       Array.prototype.indexOfPropertyValue = function(prop, value){
      for (var index = 0; index < this.length; index++){
        if (this[index][prop]){
          if (this[index][prop] == value){
            return index;
          }
        }
       }
      return -1;
    }
  }
 })();

 // Usage:
 var Data = [
   {id_list:1, name:'Nick', token:'312312'}, {id_list:2, name:'John', token:'123123'}];

 Data.indexOfPropertyValue('name', 'John'); // Returns 1 (index of array);
 Data.indexOfPropertyValue('name', 'Invalid name') // Returns -1 (no result);
 var indexOfArray = Data.indexOfPropertyValue('name', 'John');
 Data[indexOfArray] // Returns the desired object.

你可以使用数组。使用自定义函数作为参数进行排序,以定义排序机制。

在你的例子中,它会给出:

var Data = [
    {id_list:1, name:'Nick',token:'312312'},{id_list:2,name:'John',token:'123123'}
]

Data.sort(function(a, b){
    return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
});

alert("First name is : " + Data[0].name); // alerts 'John'
alert("Second name is : " + Data[1].name); // alerts 'Nick'

如果a应该在b之前,排序函数必须返回-1;如果a应该在b之后,则返回1;如果两者相等,则返回0。由您在排序函数中定义正确的逻辑对数组进行排序。

错过了你问题的最后一部分,你想知道索引。就像其他人说的那样,你必须循环遍历数组才能找到它。