我有问题。
我想创建搜索数组函数,但是在数组中我有对象,而且我不知道如何从函数属性中引用此对象的键。
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
感谢帮助。
答案 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)
只需对代码做以下更改,它就会起作用:
在调用searchAndGetIndex
函数时,将name
更改为'name'
,因为对象键是字符串。
将x.key
更改为x[key]
在条件
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