繁体   English   中英

如何检查JavaScript对象中的值是否存在,以便不加倍?

[英]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/>';    
    }
}

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

您可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM