[英]How to check if value exists in JavaScript object in order not double?
演示和完整的代码是这样的: https : //jsfiddle.net/oscar11/44L4z5e0/
我的Javascript代码是这样的:
var json = {
"SearchAvailResponse": {
"Hotel": [{
"HCode": "IDJKT_00393",
"Name": "All Seasons Jakarta Gajah Mada (Opening July 2013)",
}, {
"HCode": "IDJKT_00448",
"Name": "Holiday Inn Express Jakarta Pluit"
}, {
"HCode": "IDJKT_00448",
"Name": "Holiday Inn Express Jakarta Pluit"
}, {
"HCode": "IDJKT_00448",
"Name": "Holiday Inn Express Jakarta Pluit"
}, {
"HCode": "IDJKT_00448",
"Name": "Holiday Inn Express Jakarta Pluit"
}, {
"HCode": "IDJKT_00337",
"Name": "Novotel Gajah Mada"
}, {
"HCode": "IDJKT_00337",
"Name": "Novotel Gajah Mada"
}, {
"HCode": "IDJKT_00344",
"Name": "Rota International"
}]
}
};
var totalHotel = json.SearchAvailResponse.Hotel.length;
// console.log(totalHotel);
var hotel = '';
for(var i=0;i<totalHotel;i++){
console.log(json.SearchAvailResponse.Hotel[i].Name);
hotel += json.SearchAvailResponse.Hotel[i].Name;
hotel += '<br/>';
}
$('#hotel').html(hotel);
显示的值结果是双精度数据
我想要这样的结果:
All Seasons Jakarta Gajah Mada (Opening July 2013)
Holiday Inn Express Jakarta Pluit
Novotel Gajah Mada
Rota International
有解决我问题的方法吗?
谢谢
您可以使用它。 使用数组检查值是否已经读取。
使用hotelArray.indexOf(val) == -1
检查数组中是否存在值。
var totalHotel = json.SearchAvailResponse.Hotel.length;
// console.log(totalHotel);
var hotel = '';
var hotelArray = [];
for (var i = 0; i < totalHotel; i++) {
val = json.SearchAvailResponse.Hotel[i].Name;
console.log(json.SearchAvailResponse.Hotel[i].Name);
if (hotelArray.indexOf(val) == -1) {
hotelArray.push(json.SearchAvailResponse.Hotel[i].Name);
}
}
$('#hotel').html(hotelArray.join('<br/>'));
var totalHotel = json.SearchAvailResponse.Hotel.length;
// console.log(totalHotel);
var hotel = '';
var hotels = [];
for(var i=0;i<totalHotel;i++){
if(jQuery.inArray(json.SearchAvailResponse.Hotel[i].Name, hotels) == -1)
{
hotels.push(json.SearchAvailResponse.Hotel[i].Name);
hotel += json.SearchAvailResponse.Hotel[i].Name;
hotel += '<br/>';
}
}
您可以使用jQuery的each()简化循环,还可以使用对象属性作为注册已经看到过哪些酒店的快速方法。
这是使其工作的代码:
var allHotels = json.SearchAvailResponse.Hotel;
var seenHotels = {};
$(allHotels).each(function(i, hotel) {
if (!seenHotels[hotel.Name]) {
$("#hotel").append("<p>" + hotel.Name + "</p>");
}
seenHotels[hotel.Name] = true;
});
您可以在此小提琴中看到它的作用: https : //jsfiddle.net/fzaey8jw/
首先创建一个对象(表示一个哈希表)
var hotels = json.SearchAvailResponse.Hotel.reduce(function(map, obj) {
map[obj.Name] = obj.HCode;
return map;
}, {});
之后,您可以执行以下操作:
var hotel = Object.keys(hotels).sort().join('<br/>');
你可以这样
var json = {
"SearchAvailResponse": {
"Hotel": [{
"HCode": "IDJKT_00393",
"Name": "All Seasons Jakarta Gajah Mada (Opening July 2013)",
}, {
"HCode": "IDJKT_00448",
"Name": "Holiday Inn Express Jakarta Pluit"
}, {
"HCode": "IDJKT_00448",
"Name": "Holiday Inn Express Jakarta Pluit"
}, {
"HCode": "IDJKT_00448",
"Name": "Holiday Inn Express Jakarta Pluit"
}, {
"HCode": "IDJKT_00448",
"Name": "Holiday Inn Express Jakarta Pluit"
}, {
"HCode": "IDJKT_00337",
"Name": "Novotel Gajah Mada"
}, {
"HCode": "IDJKT_00337",
"Name": "Novotel Gajah Mada"
}, {
"HCode": "IDJKT_00344",
"Name": "Rota International"
}]
}
};
k={};
var totalHotel = json.SearchAvailResponse.Hotel.length;
for(i=0;i<totalHotel;i++){
k[json.SearchAvailResponse.Hotel[i].Name]=0;
}
var hotel=Object.keys(k).join("<br/>");
$('#hotel').html(hotel);
在这里我再次创建一个对象,但是对象的键将是酒店的名称,因为键不能在对象中重复,因此下一次仅将我与这些键连接并获得结果。 希望对您有所帮助
您是否尝试过仅检查生成的html中是否已经存在该名称?
var totalHotel = json.SearchAvailResponse.Hotel.length;
// console.log(totalHotel);
var hotel = '';
for(var i=0;i<totalHotel;i++){
console.log(json.SearchAvailResponse.Hotel[i].Name);
var thisHotel = json.SearchAvailResponse.Hotel[i].Name;
if(hotel.indexOf(thisHotel) === -1){
hotel += thisHotel;
hotel += '<br/>';
}
}
$('#hotel').html(hotel);
这是可行的,在您的jsfiddle中,返回值为:
All Seasons Jakarta Gajah Mada (Opening July 2013)
Holiday Inn Express Jakarta Pluit
Novotel Gajah Mada
Rota International
在这里,您只需要检查数据是否重复即可,然后再将其添加到酒店数组中:这是一个演示https://jsfiddle.net/44L4z5e0/2/
只需添加
var uniqueNames = [];
for(i = 0; i<totalHotel; i++){
if(uniqueNames.indexOf(json.SearchAvailResponse.Hotel[i].Name) === -1){
uniqueNames.push(json.SearchAvailResponse.Hotel[i].Name);
}
}
jQuery的
var json = {
"SearchAvailResponse": {
"Hotel": [{
"HCode": "IDJKT_00393",
"Name": "All Seasons Jakarta Gajah Mada (Opening July 2013)",
}, {
"HCode": "IDJKT_00448",
"Name": "Holiday Inn Express Jakarta Pluit"
}, {
"HCode": "IDJKT_00448",
"Name": "Holiday Inn Express Jakarta Pluit"
}, {
"HCode": "IDJKT_00448",
"Name": "Holiday Inn Express Jakarta Pluit"
}, {
"HCode": "IDJKT_00448",
"Name": "Holiday Inn Express Jakarta Pluit"
}, {
"HCode": "IDJKT_00337",
"Name": "Novotel Gajah Mada"
}, {
"HCode": "IDJKT_00337",
"Name": "Novotel Gajah Mada"
}, {
"HCode": "IDJKT_00344",
"Name": "Rota International"
}]
}
};
var totalHotel = json.SearchAvailResponse.Hotel.length;
// console.log(totalHotel);
var hotel = '';
var uniqueNames = [];
for(i = 0; i<totalHotel; i++){
if(uniqueNames.indexOf(json.SearchAvailResponse.Hotel[i].Name) === -1){
uniqueNames.push(json.SearchAvailResponse.Hotel[i].Name);
}
}
for(i = 0; i< uniqueNames.length; i++){
console.log(uniqueNames[i]);
hotel+=uniqueNames[i]+"<br>";
}
$('#hotel').html(hotel);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.