2016-03-02 47 views
0

演示,完整的代码是这样的:https://jsfiddle.net/oscar11/44L4z5e0/如何检查JavaScript对象中是否存在值为了不加倍?

我的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 

任何解决方案来解决我的问题?

谢谢

+0

如果这是从数据库我会建议修复查询,而不是JSON ..如果不是数据库请忽略此评论 – guradio

回答

0

在这里你去只需要检查数据是否追加之前反复它到酒店阵列:这里是演示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); 
5

您可以使用它。使用数组检查值是否已经读取。使用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/>')); 

DEMO

+0

我需要你的帮助。看看这里:http://stackoverflow.com/questions/37209847/how-to-send-parameter-json-array-when-modal-open –

0

有你在试图简单地检查该名称是否已经在你生成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 
1
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/>';  
    } 
} 

演示 - >https://jsfiddle.net/83dbha0h/

1

您可以使用jQuery的每个()来简化循环,并且可以使用对象的属性作为一个快速的方法来注册酒店已经看到的。

这里是为了让代码它的工作:

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/

1

首先创建一个对象(指一个HashMap)

var hotels = json.SearchAvailResponse.Hotel.reduce(function(map, obj) { 
    map[obj.Name] = obj.HCode; 
    return map; 
}, {}); 

之后你可以这样做:

var hotel = Object.keys(hotels).sort().join('<br/>'); 
1

你可以这样做

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); 

在这里,我再次作出对象,但对象的关键是酒店的名字,因为关键can'not在对象重复所以其只服用一次,下一次我正在参加这些关键与并取得成果。 希望它会帮助

相关问题