Поиск элемента массива, по значению поля и замена, одного из значений этого элемента

215
12 декабря 2016, 10:06

есть два массива:

  1. Первый

    [{"order_status_id":"1","name":"Принят","nameshop":"улица Решетникова, д.5","number_act":"494","date_added":"2015-04-06 14:57:52","date_of_readiness":"0000-00-00","shop_id":"5","master_id":"7","namemaster":"Анисимов Валерий","price":"1500.0000","outgo":"0.0000","paid_id":"0","collection_id":"0","device":"Hp povilion g6","action":"","textaction":"Изменить"},{"order_status_id":"1","name":"Принят","nameshop":"улица Решетникова, д.5","number_act":"493","date_added":"2015-04-06 13:03:44","date_of_readiness":"0000-00-00","shop_id":"5","master_id":"7","namemaster":"Анисимов Валерий","price":"1500.0000","outgo":"0.0000","paid_id":"1","collection_id":"0","device":"iphone 4s","action":"","textaction":"Изменить"},{"order_status_id":"1","name":"Принят","nameshop":"улица Решетникова, д.5","number_act":"492","date_added":"2015-04-06 11:05:27","date_of_readiness":"0000-00-00","shop_id":"5","master_id":"7","namemaster":"Анисимов Валерий","price":"0.0000","outgo":"0.0000","paid_id":"1","collection_id":"0","device":"Hts Desier HD","action":"","textaction":"Изменить"}]

    это массив который хранится в localStorage ,

  2. и второй массив который является ответом ajax запроса

    [{"paid_id":"0","number_act":"492"}]

надо по полю "number_act" найти элемент массива и заменить значение paid_id. Есть уже готовая функция , которая это делает ? мой код не работает :

  function Paid(paid,number_act) {
        var paid = paid;
        var number_act = number_act;
        console.log(paid,number_act);
        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: 'index.php?route=catalog/accounting_akt/PaidCollection&token=' + token,
            cache:true,
            resetForm: true,
            data: {number_act : number_act, paid : paid},
            success: function(results) {
                $.each(results, function (index, value) {
                    var number_act = value['number_act'];
                    var paid = value['paid_id'];
                });
                console.log(number_act,paid);
                var resultsave = JSON.stringify(localStorage.getItem('result'));
                resultsave = JSON.parse(resultsave);
                console.log(resultsave);
                $.each(resultsave, function(item) {
                    if (item['number_act'] == number_act)
                            item['paid'] == paid;
                });
                console.log(resultsave);
            }
        });
    }
Answer 1

В результате у меня получилось заменить значение в массиве следующем образом :

 function Paid(paid,number_act) { 
    var paid = paid; 
    var number_act = number_act; 
 
    $.ajax({ 
        type: 'POST', 
        dataType: 'json', 
        url: 'index.php?route=catalog/accounting_akt/PaidCollection&token=' + token, 
        cache:true, 
        resetForm: true, 
        data: {number_act : number_act, paid : paid}, 
        success: function(results) { 
            var resultsave = JSON.parse(localStorage.getItem('result')); 
 
            function setPaid(resultsave) { 
                $.each(resultsave, function(key, item) { 
                    if (item['number_act'] == number_act) { 
                        resultsave[key]['paid_id'] = paid; 
                    } 
                }); 
 
                return resultsave; 
            } 
            var result = setPaid(resultsave); 
            localStorage.setItem('result', JSON.stringify(result)); 
 
        } 
    }); 
}

Answer 2

Рискну предположить что поменять нужно в первом. Тогда так

http://jsfiddle.net/os6j30rk/

(Из первого массива убрал несколько полей чтобы уменьшить количество кода)

var array1 = [{
        "order_status_id":"1",
        "name":"Принят",
        "nameshop":"улица Решетникова, д.5",
        "number_act":"494",
        "paid_id":"0",
    },{
        "order_status_id":"1",
        "name":"Принят",
        "nameshop":"улица Решетникова, д.5",
        "number_act":"493",
        "paid_id":"1",
    },{
        "order_status_id":"1",
        "name":"Принят",
        "nameshop":"улица Решетникова, д.5",
        "number_act":"492",
        "paid_id":"1",
    }],
    array2 = [{
        "paid_id":"0",
        "number_act":"492"
    }];
function setPaid(array1, array2) {
    var ix1, ix2;
    for (var ix1 = array1.length - 1; ix1 >= 0; ix1 -= 1) {
        for (var ix2 = array2.length - 1; ix2 >= 0; ix2 -= 1) {
            if (array1[ix1].number_act === array2[ix2].number_act) {
                array1[ix1].paid_id = array2[ix2].paid_id;
            }
        }
    }
}
setPaid(array1, array2);
console.log(array1);
Answer 3

Если Я правильно понял Вашу задачу, то вот решение. http://jsfiddle.net/Ls0m2m7a/

var firstArr = [{
    "order_status_id": "1",
    "name": "Принят",
    "nameshop": "улица Решетникова, д.5",
    "number_act": "494",
    "date_added": "2015-04-06 14:57:52",
    "date_of_readiness": "0000-00-00",
    "shop_id": "5",
    "master_id": "7",
    "namemaster": "Анисимов Валерий",
    "price": "1500.0000",
    "outgo": "0.0000",
    "paid_id": "0",
    "collection_id": "0",
    "device": "Hp povilion g6",
    "action": "",
    "textaction": "Изменить"
}, {
    "order_status_id": "1",
    "name": "Принят",
    "nameshop": "улица Решетникова, д.5",
    "number_act": "493",
    "date_added": "2015-04-06 13:03:44",
    "date_of_readiness": "0000-00-00",
    "shop_id": "5",
    "master_id": "7",
    "namemaster": "Анисимов Валерий",
    "price": "1500.0000",
    "outgo": "0.0000",
    "paid_id": "1",
    "collection_id": "0",
    "device": "iphone 4s",
    "action": "",
    "textaction": "Изменить"
}, {
    "order_status_id": "1",
    "name": "Принят",
    "nameshop": "улица Решетникова, д.5",
    "number_act": "492",
    "date_added": "2015-04-06 11:05:27",
    "date_of_readiness": "0000-00-00",
    "shop_id": "5",
    "master_id": "7",
    "namemaster": "Анисимов Валерий",
    "price": "0.0000",
    "outgo": "0.0000",
    "paid_id": "1",
    "collection_id": "0",
    "device": "Hts Desier HD",
    "action": "",
    "textaction": "Изменить"
}];
var secondArr = [{"paid_id": "0", "number_act": "492"}];
$.each(secondArr, function (indexSec, valueSec) {
    $.each(firstArr, function (index, value) {
        if (secondArr[indexSec]['number_act'] == value['number_act']) {
            secondArr[indexSec]['paid_id'] = value['paid_id'];
        }
    });
});
console.log(secondArr);
READ ALSO
Как можно получить содержимое div в asp.net web forms

Как можно получить содержимое div в asp.net web forms

Здравствуйте,подскажите, пожалуйста, можно ли сразу в переменную считать содержимое div? например в jquery есть методhtml() есть ли что то похоже...

228
Ошибка в консоли из-за history.js

Ошибка в консоли из-за history.js

У меня есть сайт, серфинг страниц реализован через historyjs, в консоли постоянно висит такое сообщение:

206
Подскажите как правильно обрабатывать JSON данные в jquery

Подскажите как правильно обрабатывать JSON данные в jquery

Впервые столкнулся с обработкой json данныхНашел простой пример и вроде бы разобрался

221
Выпадающий список. JQuery

Выпадающий список. JQuery

Есть списокКак видно из изображения с проблемами

269