KhAn SaAb
KhAn SaAb

Reputation: 5366

Compare two strings is not working properly in javascript

Here is my Javascript function where I'm comparing two strings one value receive as a function parameter and another one is fetching from json which is coming from Spring response.

But I'm very Surprise I'm not able to compare two strings with === and ==, I can see the values in debugger.

I'm caling my function from my HTML code:

<textarea onblur="searchProduct(this.value)"></textarea >

Javascript:

function searchProduct(value)
{
    alert(value);
    for (i in allProducts) {
        console.log(allProducts[0].productName);
        var tempProductName=allProducts[i].productName;
            alert(tempProductName.toString() == value.toString());
        // checks product name is present or not
        if( tempProductName.toString() === value.toString()){
//          setting other values details of products
                    $('#description').val(allProducts[i].productDescription);
                    $('.cost').val(allProducts[i].unitPrice);
        }//if

        }
}//searchProduct

allProducts: response from spring

[{"productId":3,"sku":"QTY","vendorProductId":"v1","productName":"P1name","productDescription":"p1 desc","supplierId":"s1","categoryId":"c","quantityPerUnit":1.0,"unitPrice":760.0,"msrp":1.0,"availableSize":40.0,"availableColors":"black,blue","size":40.0,"color":"white","discount":0.0,"unitWeight":1.0,"unitsInStock":148.0,"unitsOnOrder":500.0,"reorderLevel":150.0,"productAvailable":"Y","discountAvailable":"N","currentOrder":0.0,"pictureURL":"Picture path","ranking":10,"note":"Sample Notes","smsNotification":"N","productExpiryDate":null,"productDeleted":null,"alertExpiryDate":null,"idsku":"IDSKU1"},{"productId":4,"sku":"QTY","vendorProductId":"v1","productName":"P2name","productDescription":"p1 desc","supplierId":"s1","categoryId":"c","quantityPerUnit":1.0,"unitPrice":1.0,"msrp":1.0,"availableSize":40.0,"availableColors":"black,blue","size":40.0,"color":"white","discount":0.0,"unitWeight":1.0,"unitsInStock":150.0,"unitsOnOrder":500.0,"reorderLevel":150.0,"productAvailable":"Y","discountAvailable":"N","currentOrder":0.0,"pictureURL":"Picture path","ranking":10,"note":"Sample Notes","smsNotification":"N","productExpiryDate":null,"productDeleted":null,"alertExpiryDate":null,"idsku":"IDSKU1"},{"productId":5,"sku":"QTY","vendorProductId":"v1","productName":"P3name","productDescription":"p1 desc","supplierId":"s1","categoryId":"c","quantityPerUnit":1.0,"unitPrice":1.0,"msrp":1.0,"availableSize":40.0,"availableColors":"black,blue","size":40.0,"color":"white","discount":0.0,"unitWeight":1.0,"unitsInStock":1000.0,"unitsOnOrder":500.0,"reorderLevel":150.0,"productAvailable":"Y","discountAvailable":"N","currentOrder":0.0,"pictureURL":"Picture path","ranking":10,"note":"Sample Notes","smsNotification":"N","productExpiryDate":null,"productDeleted":null,"alertExpiryDate":null,"idsku":"IDSKU1"},{"productId":6,"sku":"QTY","vendorProductId":"v1","productName":"P4name","productDescription":"p1 desc","supplierId":"s1","categoryId":"c","quantityPerUnit":1.0,"unitPrice":1.0,"msrp":1.0,"availableSize":40.0,"availableColors":"black,blue","size":40.0,"color":"white","discount":0.0,"unitWeight":1.0,"unitsInStock":1000.0,"unitsOnOrder":500.0,"reorderLevel":150.0,"productAvailable":"Y","discountAvailable":"N","currentOrder":0.0,"pictureURL":"Picture path","ranking":10,"note":"Sample Notes","smsNotification":"N","productExpiryDate":null,"productDeleted":null,"alertExpiryDate":null,"idsku":"IDSKU1"},{"productId":7,"sku":"QTY","vendorProductId":"v1","productName":"P5name","productDescription":"p1 desc","supplierId":"s1","categoryId":"c","quantityPerUnit":1.0,"unitPrice":1.0,"msrp":1.0,"availableSize":40.0,"availableColors":"black,blue","size":40.0,"color":"white","discount":0.0,"unitWeight":1.0,"unitsInStock":1000.0,"unitsOnOrder":500.0,"reorderLevel":150.0,"productAvailable":"Y","discountAvailable":"N","currentOrder":0.0,"pictureURL":"Picture path","ranking":10,"note":"Sample Notes","smsNotification":"N","productExpiryDate":null,"productDeleted":null,"alertExpiryDate":null,"idsku":"IDSKU1"},{"productId":8,"sku":"QTY","vendorProductId":"v1","productName":"P6name","productDescription":"p1 desc","supplierId":"s1","categoryId":"c","quantityPerUnit":1.0,"unitPrice":1.0,"msrp":1.0,"availableSize":40.0,"availableColors":"black,blue","size":40.0,"color":"white","discount":0.0,"unitWeight":1.0,"unitsInStock":1000.0,"unitsOnOrder":500.0,"reorderLevel":150.0,"productAvailable":"Y","discountAvailable":"N","currentOrder":0.0,"pictureURL":"Picture path","ranking":10,"note":"Sample Notes","smsNotification":"N","productExpiryDate":null,"productDeleted":null,"alertExpiryDate":null,"idsku":"IDSKU1"},{"productId":9,"sku":"QTY","vendorProductId":"v1","productName":"P7name","productDescription":"p1 desc","supplierId":"s1","categoryId":"c","quantityPerUnit":1.0,"unitPrice":1.0,"msrp":1.0,"availableSize":40.0,"availableColors":"black,blue","size":40.0,"color":"white","discount":0.0,"unitWeight":1.0,"unitsInStock":1000.0,"unitsOnOrder":500.0,"reorderLevel":150.0,"productAvailable":"Y","discountAvailable":"N","currentOrder":0.0,"pictureURL":"Picture path","ranking":10,"note":"Sample Notes","smsNotification":"N","productExpiryDate":null,"productDeleted":null,"alertExpiryDate":null,"idsku":"IDSKU1"},{"productId":10,"sku":"QTY","vendorProductId":"v1","productName":"P8name","productDescription":"p1 desc","supplierId":"s1","categoryId":"c","quantityPerUnit":1.0,"unitPrice":1.0,"msrp":1.0,"availableSize":40.0,"availableColors":"black,blue","size":40.0,"color":"white","discount":0.0,"unitWeight":1.0,"unitsInStock":1000.0,"unitsOnOrder":500.0,"reorderLevel":150.0,"productAvailable":"Y","discountAvailable":"N","currentOrder":0.0,"pictureURL":"Picture path","ranking":10,"note":"Sample Notes","smsNotification":"N","productExpiryDate":null,"productDeleted":null,"alertExpiryDate":null,"idsku":"IDSKU1"},{"productId":11,"sku":"QTY","vendorProductId":"v1","productName":"P9name","productDescription":"p1 desc","supplierId":"s1","categoryId":"c","quantityPerUnit":1.0,"unitPrice":1.0,"msrp":1.0,"availableSize":40.0,"availableColors":"black,blue","size":40.0,"color":"white","discount":0.0,"unitWeight":1.0,"unitsInStock":1000.0,"unitsOnOrder":500.0,"reorderLevel":150.0,"productAvailable":"Y","discountAvailable":"N","currentOrder":0.0,"pictureURL":"Picture path","ranking":10,"note":"Sample Notes","smsNotification":"N","productExpiryDate":null,"productDeleted":null,"alertExpiryDate":null,"idsku":"IDSKU1"},{"productId":12,"sku":"QTY","vendorProductId":"v1","productName":"P9name","productDescription":"p1 desc","supplierId":"s1","categoryId":"c","quantityPerUnit":1.0,"unitPrice":1.0,"msrp":1.0,"availableSize":40.0,"availableColors":"black,blue","size":40.0,"color":"white","discount":0.0,"unitWeight":1.0,"unitsInStock":1000.0,"unitsOnOrder":500.0,"reorderLevel":150.0,"productAvailable":"Y","discountAvailable":"N","currentOrder":0.0,"pictureURL":"Picture path","ranking":10,"note":"Sample Notes","smsNotification":"N","productExpiryDate":null,"productDeleted":null,"alertExpiryDate":null,"idsku":"IDSKU1"},{"productId":13,"sku":"QTY","vendorProductId":"v1","productName":"P9name","productDescription":"p1 desc","supplierId":"s1","categoryId":"c","quantityPerUnit":1.0,"unitPrice":1.0,"msrp":1.0,"availableSize":40.0,"availableColors":"black,blue","size":40.0,"color":"white","discount":0.0,"unitWeight":1.0,"unitsInStock":1000.0,"unitsOnOrder":500.0,"reorderLevel":150.0,"productAvailable":"Y","discountAvailable":"N","currentOrder":0.0,"pictureURL":"Picture path","ranking":10,"note":"Sample Notes","smsNotification":"N","productExpiryDate":null,"productDeleted":null,"alertExpiryDate":null,"idsku":"IDSKU1"},{"productId":14,"sku":"QTY","vendorProductId":"v1","productName":"P9name","productDescription":"p1 desc","supplierId":"s1","categoryId":"c","quantityPerUnit":1.0,"unitPrice":1.0,"msrp":1.0,"availableSize":40.0,"availableColors":"black,blue","size":40.0,"color":"white","discount":0.0,"unitWeight":1.0,"unitsInStock":1000.0,"unitsOnOrder":500.0,"reorderLevel":150.0,"productAvailable":"Y","discountAvailable":"N","currentOrder":0.0,"pictureURL":"Picture path","ranking":10,"note":"Sample Notes","smsNotification":"N","productExpiryDate":null,"productDeleted":null,"alertExpiryDate":null,"idsku":"IDSKU1"},{"productId":15,"sku":"QTY","vendorProductId":"v1","productName":"P9name","productDescription":"p1 desc","supplierId":"s1","categoryId":"c","quantityPerUnit":1.0,"unitPrice":1.0,"msrp":1.0,"availableSize":40.0,"availableColors":"black,blue","size":40.0,"color":"white","discount":0.0,"unitWeight":1.0,"unitsInStock":1000.0,"unitsOnOrder":500.0,"reorderLevel":150.0,"productAvailable":"Y","discountAvailable":"N","currentOrder":0.0,"pictureURL":"Picture path","ranking":10,"note":"Sample Notes","smsNotification":"N","productExpiryDate":null,"productDeleted":null,"alertExpiryDate":null,"idsku":"IDSKU1"},{"productId":16,"sku":"QTY","vendorProductId":"v1","productName":"P10name","productDescription":"p1 desc","supplierId":"s1","categoryId":"c","quantityPerUnit":1.0,"unitPrice":1.0,"msrp":1.0,"availableSize":40.0,"availableColors":"black,blue","size":40.0,"color":"white","discount":0.0,"unitWeight":1.0,"unitsInStock":1000.0,"unitsOnOrder":500.0,"reorderLevel":150.0,"productAvailable":"Y","discountAvailable":"N","currentOrder":0.0,"pictureURL":"Picture path","ranking":10,"note":"Sample Notes","smsNotification":"N","productExpiryDate":null,"productDeleted":null,"alertExpiryDate":null,"idsku":"IDSKU1"}]

Upvotes: 0

Views: 84

Answers (3)

bcherny
bcherny

Reputation: 3172

Looking at your code, this should work.

Try changing the iterator - for..in is for iterating over objects (ie. dictionaries). To iterate over an array, use either a regular for or a forEach:

function searchProduct(value) {
  allProducts
    .filter(function(product) {
      return product[productName] === value
    })
    .forEach(function(product) {
      $('#description').val(product.productDescription);
      $('.cost').val(product.unitPrice);
    });
}

Upvotes: 2

Jakub Wojnowski
Jakub Wojnowski

Reputation: 138

JS string comparison is case sensitive, and you probably need case insensitive one, for example:

tempProductName.toUpperCase() === value.toUpperCase()

instead of:

tempProductName.toString() === value.toString()

You don't need toString() anyway, because the field is already a string.

Upvotes: 2

Yotam Salmon
Yotam Salmon

Reputation: 2411

You can implement your own string comparing method with indexOf and length:

String.prototype.equals = function (str2) {
    return this.indexOf(str2) == 0 && this.length == str2.length;
}

Or a more "PHP" style like method:

function string_compare (str1, str2) {
   return str1.indexOf(str2) == 0 && str1.length == str2.length;
}

Upvotes: 1

Related Questions