使用function属性引用数组中的对象

时间:2018-07-06 16:29:54

标签: javascript arrays function object concatenation

我有问题。
我想创建搜索数组函数,但是在数组中我有对象,而且我不知道如何从函数属性中引用此对象的键。

var array= [{
    name: 'Joe',
    surname: 'Smith'
}, {
    name: 'John',
    surname: 'Smith'
}];


function searchAndGetIndex(arrayName, key, value) {
    var cloneArray = [...arrayName];
    var saveIndex = [];

    for(var i = 0; i < arrayName.length; i++) {
        var getIndex = cloneArray.findIndex(x => x.key == value); // x.key is my problem
        if(getFilterResult !== -1) saveIndex.push(getIndex + i);
        cloneArray.splice(getIndex , 1);
    }

    return saveIndex;
}

console.log(searchAndGetIndex(array, name, 'John')); // 1

感谢帮助。

3 个答案:

答案 0 :(得分:1)

恕我直言,这就是您想要的:

var array= [{
    name: 'Joe',
    surname: 'Smith'
}, {
    name: 'John',
    surname: 'Smith'
}];

function searchAndGetIndex(arrayName, key, value) {
    let cloneArray = [...arrayName];
    let saveIndex = [];
    
    cloneArray.forEach((e, i) => {
      if(e[key] === value) {
        saveIndex.push(i)
      }
    })
    return saveIndex;
}

console.log(searchAndGetIndex(array, 'name', 'John'));

答案 1 :(得分:0)

调用searchAndGetIndex时,name应该是'name',因为name是不存在的变量。您正在传递 string 'name',因为对象键是字符串。

var myObject = { test: 2 };
myObject[test];   // variable test is undefined
myObject.test;    // 2
myObject['test']; // 2

调用findIndex时,您的x.key应该是x[key],因为x.key意味着要检查key上名为x的属性,而x[key]表示要检查名称为变量key值的属性(在本例中,属性为'name')。

var myObject = { key: 1, test: 2 };
var key = 'test';
myObject.key;     // 1
myObject['key'];  // 1
myObject[key];    // 2
myObject['test']; // 2

答案 2 :(得分:0)

只需对代码做以下更改,它就会起作用:

  1. 在调用searchAndGetIndex函数时,将name更改为'name',因为对象键是字符串。

  2. x.key更改为x[key]

  3. 在条件

  4. 中将getFilterResult更改为getIndex

这是运行代码段:

var array= [{
    name: 'Joe',
    surname: 'Smith'
}, {
    name: 'John',
    surname: 'Smith'
}];


function searchAndGetIndex(arrayName, key, value) {
    var cloneArray = [...arrayName];
    var saveIndex = [];

    for(var i = 0; i < arrayName.length; i++) {
        var getIndex = cloneArray.findIndex(x => x[key] == value); // x.key is my problem
        if(getIndex !== -1) saveIndex.push(getIndex + i);
        cloneArray.splice(getIndex , 1);
    }

    return saveIndex;
}

console.log(searchAndGetIndex(array, 'name', 'John')); // 1