Javascript 有没有更好的方法在包含结构化数据的数组上实现搜索?
我经常遇到需要动态创建包含特定数据的对象数组的情况,这也需要搜索方法,例如: JavascriptJavascript 有没有更好的方法在包含结构化数据的数组上实现搜索?,javascript,c++,arrays,dynamic,Javascript,C++,Arrays,Dynamic,我经常遇到需要动态创建包含特定数据的对象数组的情况,这也需要搜索方法,例如: Javascript var people = []; var addPerson = function(name, age) { people.push({name:name, age:age}); } getArrayID = function (name) { for(var i = 0 ; i < main.nodes.length ; i++) {
var people = [];
var addPerson = function(name, age) {
people.push({name:name,
age:age});
}
getArrayID = function (name) {
for(var i = 0 ; i < main.nodes.length ; i++) {
if(main.nodes[i].name == name)
return i;
}
return -1;
}
addPerson("Person A", 22);
addPerson("Person B", 23);
console.log(people[getArrayID("PersonB")].age);
// Result: 23
var-people=[];
var addPerson=函数(姓名、年龄){
人。推送({name:name,
年龄:年龄});
}
getArrayID=函数(名称){
对于(var i=0;i
虽然这是可行的,但感觉这是一个不恰当的解决方案,无法解决“标记”数据块的问题,因为它通常还包括一个getArrayName(id)方法
如果可能,我希望看到一种“松散”语言的解决方案,如Javascript(对象和数组可以用字符串命名),以及更严格的语言,如C++或Java是的。使用lodash。使用它,您可以通过以下方式简化:
var person = _.find(people, { "name": "Person B" });
if (person !== undefined) {
var age = 'age' in person ? person.age:'not available';
console.log('Age: ',age);
} else {
console.log("Couldn't find that guy");
}
下面是一个JSFIDLE:
实现这一点的方法很少 :
var-people=[];
var addPerson=函数(姓名、年龄){
人,推({
姓名:姓名,,
年龄:年龄
});
}
//将返回一个人或null
getPerson=函数(名称){
返回人员。查找(功能(人员){
return person.name==name;
});
}
addPerson(“人A”,22);
addPerson(“人员B”,23);
var pers=个人(“个人B”);
//我们必须检查pers是否为空/未定义
若有(人){
控制台日志(个人年龄);
文件。书写(个人年龄);
}
如果人的名字是唯一的,我会选择使用对象而不是数组。这样,您就不必每次都搜索整个数组,并从本机的“搜索性能”中获益
大概是这样的:
var people = {};
var addPerson = function(name, age) {
people[name] = {name:name, age:age};
}
addPerson("Person A", 22);
addPerson("Person B", 23);
var person = people["PersonB"];
console.log(person && person.age); // Result: 23
在Javascript中,您可以混合使用,比如只返回索引或特殊模式
此解决方案的特点是具有搜索参数的对象,如要搜索的属性和要查找的值。结果是一个数组,其中包含该数组所有匹配模式的索引
函数设置条件(条件){
var key=Object.keys(条件)[0],
值=条件[键];
返回函数(r、a、i){
如果(a[键]==值){
r、 推(i);
}
返回r;
}
}
var people=[{name:'persona',年龄:22},{name:'personb',年龄:23}],
index=people.reduce(setCondition({name:'personb'}),[]);
document.write(''+JSON.stringify(索引,0,4)+'')代码>询问这是两种不同的语言不是一个好主意。这就像在一个问题中问两个问题,这意味着你会得到一些答案,更多地关注其中一个,其他人则更多地关注另一个。为什么不先问一种语言,然后,如果仍然需要并且有意义的话,再为另一种语言提出第二个问题呢?欢迎这么做。请访问,看看这里有什么问题。因此,它是离题的,可能属于codereview@jogojapan我对简化的解决方案和处理此问题的常用方法都感兴趣,因为我认为这是任何使用动态数组的程序中的常见功能。我是一名自学成才的程序员,因此学习解决方案除了解决方案背后的理论之外,我还感兴趣,这不仅仅是看如何用X和Y语言来实现,而是从计算机科学的角度来看,如何最好地实现。是的,很好的一点是,你需要确认“pers”中的“未定义”。