1

I am new in JSON, i am trying to save data using JSON. I have a list of element with some button when we click the button i want the corresponding value of button are save in JSON. I am also want to compare the title with already exists in JSON.

Demo Here

4

4 回答 4

1

您可以简单地使用for循环来检查具有该标题的元素是否已经存在:

function alreadyAdded(itemTitle) {
    for (var i = 0; i < objArray.length; i++) {
        if (objArray[i].title === itemTitle) {
            return true;
        }
    }
    return false;
};

此外,您使用的不是 json 对象,而是一个 JavaScript 数组。

演示

于 2013-09-03T05:38:40.037 回答
0

我假设您想将值存储在数组中,并且在单击按钮期间您想检查该项目是否已存在于数组中。如果这是真的,那么您可以使用以下代码 -

var counter = 0;
var jsonObj = []; //declare object 

$('.imgbtn').click(function () {
    var title = $(this).parent().parent().find('span').html();
    var image = $(this).parent().parent().find('img').prop('src');
    var match = $.grep(jsonObj, function (e) { 
        return e.title == title; 
    });

    if (match.length > 0) {
        // This title already exists in the object.
        // Do whatever you want. I am simply returning.
        return;
    }

    counter++;
    $('#lblCart').html(counter);
    jsonObj.push({
        id: counter,
        title: title,
        image: image,
        description: 'Example'
    });
});

请注意,我已经在回调函数之外声明了数组。这确保了回调的所有调用都在同一个数组对象上进行。在回调中声明它只是使其可用于单个回调调用。

另请注意,您只是使用数组来存储普通的 JavaScript 对象。

演示

于 2013-09-03T05:40:32.683 回答
0

试试这个 http://jsfiddle.net/Z3v4g/

var counter = 0;
var jsonObj = []; //declare object

    $('.imgbtn').click(function () {

        var title = $(this).parent().parent().find('span').html();
        var image = $(this).parent().parent().find('img').prop('src');

        for( var i=0; i<jsonObj.length; i++){
           if( jsonObj[i].title == title ) return false;
        };

        counter++;
        $('#lblCart').html(counter);

        jsonObj.push({
           id: counter,
           title: title,
           image: image,
           description: 'Example'
           });
        });
于 2013-09-03T05:42:33.967 回答
0

第一的:

var jsonObj = []; //declare object

这不是 JSON。这是一个数组。JSON 只是 Javascript 对象的表示法。要声明一个对象,您应该这样做:

var jsonObj = {};

或者:

var jsonObj = new Object();

在此之后,您可以按照您的要求执行此操作:

var counter = 0;
var jsonObj = new Object();

$('.imgbtn').click(function () {
   var title = $(this).parent().parent().find('span').html();
   var image = $(this).parent().parent().find('img').prop('src');    
   if (!(title in jsonObj)) { // if item is not in the object, (title in jsonObj) returns true of false
       jsonObj[title] = { // When you have hundreds of items, this approach is way faster then using FOR loop, and if you need to alter the item or get one value, you can just call it by name: jsonObj['ABC'].image will return the path of the image
           id: counter,
           image: image,
           description: 'Example'
       }
       counter++;
       $('#lblCart').html(counter);
   } else {
       // Do what you want if the item is already in the list
       alert('Item already in the list');
       console.log(jsonObj[title]);
   }
});

不要使用 FOR 循环来做你不想做的事情,如果计数器变高,它只会减慢你的应用程序。

于 2013-09-03T05:48:53.983 回答