我有一些像objets这样的对象:
var MyArray = [] ,
Person = {},
[
{
name: 'John',
surname: 'Smith',
age: '22'
},
{
name: 'Jesica',
surname: 'Garou',
age: '31'
},
{
name: 'Max',
surname: 'Jolie',
age: '50'
}
]
我想查看,如果我的数据有姓名' John'不添加新人的,如果没有,则添加姓名为' John'等等。
提前致谢。
答案 0 :(得分:3)
您可以使用Array#find
处理它。我假设您要改变原始数组。
let arr = [{
name: 'Jesica',
surname: 'Garou',
age: '31'
},
{
name: 'Max',
surname: 'Jolie',
age: '50'
}
];
const obj = {
name: 'John',
surname: 'Smith',
age: '22'
};
const ensure = ({ name, ...z }) => {
if (!arr.find(v => v.name === name)) {
arr.push({ name, ...z });
}
}
ensure(obj);
console.log(arr);
答案 1 :(得分:3)
你可以使用map
,但你必须知道map迭代遍历数组中的所有元素,而findIndex
返回第一个元素索引,它等于条件并停止循环。
var MyArray = [
{
name: 'John',
surname: 'Smith',
age: '22'
},
{
name: 'Jesica',
surname: 'Garou',
age: '31'
},
{
name: 'Max',
surname: 'Jolie',
age: '50'
}
];
if(MyArray.findIndex(index => index.name === "John") > -1)
console.log("Found!");
else
console.log("Not found!");
答案 2 :(得分:2)
要检查数组中是否已存在name
,您可以使用array.some
函数。它会检查提供的name
是否已经退出。
如果没有,那么你可以编写代码来推送数组中的对象。
我使用了样本名称John
和Anne
。对于John
,函数isAlreadyPresent
返回true
。对于Anne
,它会返回false
。
let arr = [
{
name: 'John',
surname: 'Smith',
age: '22'
},
{
name: 'Jesica',
surname: 'Garou',
age: '31'
},
{
name: 'Max',
surname: 'Jolie',
age: '50'
}
];
function isAlreadyPresent(name) {
return arr.some(a => a.name === name );
}
console.log('John already exists?',isAlreadyPresent('John'));
console.log('Anne already exists?',isAlreadyPresent('Anne'));
答案 3 :(得分:0)
您需要遍历所有对象并检查其每个名称值。最糟糕的是在O(n)时间运行。
例如,要检查" John"是数组中的名称:
var inArray = false; // Have we found the name in the array yet?
for (var i = 0; i < MyArray.length; i++) { // Loop through the array of objects
if (MyArray[i].name=="John") { // If the name field is equal to "John"
inArray = true; // Name is in the array
break; // Exit the loop
}
}
答案 4 :(得分:0)
也许名称地图可能有用:
var byNam e =new Map(myArray.map(el=>[el.name,el]));
所以你可以很容易地做到:
if (byName.has("John")){
alert("already exists");
} else {
var obj = { name: "John" };
Map.set(obj.name,obj);
myArray.push(obj);
}
可以使用Set也可以实现上限,但您可能还想这样做:
byName.get("John").age=15;
答案 5 :(得分:0)
var searchTerm = "John",
index = -1;
for(var i = 0, len = MyArray.length; i < len; i++) {
if (MyArray[i].name === searchTerm) {
alert("matched string");
index = i;
break;
}
}
答案 6 :(得分:-1)
你可以制作这样的搜索功能:
const index = (array, name) => {
// Search for the string "name" in your array
for (let i in array){
// Look at every element in the array, if an element has the
// corresponding name, return its index
if (array[i].name === name) return i;
}
return -1;
// If you found nothing, return -1
}
let position = index(myArray, "John");
答案 7 :(得分:-2)
传统上我们使用构造函数来构建许多类似的对象。但是,这是怎么回事,并且超出了你所要求的范围。
这里我们可以使用for ... in循环迭代MyArray,并检查每个对象是否包含名称John。
load() {
if (this.data) {
return Promise.resolve(this.data);
}
return new Promise(resolve => {
this.http.get('http://localhost/retrieve-data.php')
.map(res => res.json())
.subscribe(data => {
this.data = this.applyHaversine(data);
this.data.sort((locationA, locationB) => {
return locationA.distance - locationB.distance;
});
resolve(this.data);
});
});