Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有更好的方法在包含结构化数据的数组上实现搜索?_Javascript_C++_Arrays_Dynamic - Fatal编程技术网

Javascript 有没有更好的方法在包含结构化数据的数组上实现搜索?

Javascript 有没有更好的方法在包含结构化数据的数组上实现搜索?,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++) {

我经常遇到需要动态创建包含特定数据的对象数组的情况,这也需要搜索方法,例如:

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++) {
        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”中的“未定义”。