JavaScript, изменение значения объекта с массивами, не затрагивая весь объект - PullRequest
0 голосов
/ 29 мая 2018

Я попытался изменить значения массивов в объекте "formDataArray", который он продолжает, однако переписывает весь объект, как только я внесу любое изменение.Это может быть вопрос неизменности, я пытался исследовать, но я бросил в полотенце.Как мне изменить значения массивов в "formDataArray" на постоянной основе;

  if ((value, pos, name)) {
      var formDataArray = {
          code: [],
          desc: [],
          qty: [],
          prices: [],
          line_price: []
      };
      switch (name) {
          case "description":
              formDataArray.desc[pos - 1] = value;
              break;
          case "code":
              formDataArray.code[pos - 1] = value;
              break;
          case "qty":
              formDataArray.qty[pos - 1] = value;
              break;
          case "price":
              formDataArray.prices[pos - 1] = value;
              break;
          case "line_price":
              formDataArray.line_price[pos - 1] = value;

              break;
          default:
      }
      console.log(formDataArray);
  }

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

FormDataArray инициализируется каждый раз, когда вы редактируете объект.Определите объект над оператором if, сделайте его первой первой строкой в ​​вашем коде:

var formDataArray = {
      code: [],
      desc: [],
      qty: [],
      prices: [],
      line_price: []
    };


if ((value, pos, name)) {
    switch (name) {
      case "description":
        formDataArray.desc[pos - 1] = value;
        break;
      case "code":
        formDataArray.code[pos - 1] = value;
        break;
      case "qty":
        formDataArray.qty[pos - 1] = value;
        break;
      case "price":
        formDataArray.prices[pos - 1] = value;
        break;
      case "line_price":
        formDataArray.line_price[pos - 1] = value;

        break;
      default:
    }
    console.log(formDataArray);
  }
0 голосов
/ 29 мая 2018

Я не уверен, что это то, что вы ищете: я правильно понимаю, что вы хотите создать функцию update(), которая позволяет обновлять содержимое, содержащееся в объекте formDataArray.

В этом случае определите новую функцию, нет необходимости в операторе if.Функция будет принимать в качестве аргументов необходимую информацию о модификации и вносить эти изменения в существующий массив (не новый).

Вот пример кода:

var formDataArray = {
  code: [193, 843, 393],
  desc: ['pen', 'table', 'cards'],
  qty: [1, 2, 3],
  prices: [5, 50, 10],
  line_price: [3, 2, 1]
};


let update = function(value, pos, name) {
  switch (name) {
    case "description":
      formDataArray.desc[pos - 1] = value;
      break;
    case "code":
      formDataArray.code[pos - 1] = value;
      break;
    case "qty":
      formDataArray.qty[pos - 1] = value;
      break;
    case "price":
      formDataArray.prices[pos - 1] = value;
      break;
    case "line_price":
      formDataArray.line_price[pos - 1] = value;

      break;
    default:
  }
  return formDataArray;

}

console.log(formDataArray)
update(12, 2, 'price')
console.log(formDataArray)

Я добавил несколько примеров данных в formDataArray.Посмотрите консоль, чтобы увидеть изменения, внесенные в массив цен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...