Отдельные данные в набор в массиве - PullRequest
1 голос
/ 21 апреля 2020
let data = [];

 $(".clo :input").each(function(index,value){   
      data[this.id] = $(this).val();
 });

 console.log(data); //display data below
[
  agent_dra_0: "0"
  agent_tie_0: "0"
  agent_tiger_0: "0"
  agent_userid_0: "2"
  agent_dra_1: "0"
  agent_tie_1: "k"
  agent_tiger_1: "1"
  agent_userid_1: "4"
]

Над данными I l oop все входные значения в одном массиве, я хочу разделить эти данные на заданные данные. Это означает, что каждый индекс хранится в одном массиве. Это станет как ниже. Кто-нибудь знает, как это исправить: (.

0: [{
  agent_dra_0: "0",
  agent_tie_0: "0",
  agent_tiger_0: "0",
  agent_userid_0: "2"
}

1: {
  agent_dra_1: "0",
  agent_tie_1: "0",
  agent_tiger_1: "0",
  agent_userid_1: "4"
}]

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Вы можете использовать функцию, которая x.a = 1 совпадает с x["a"] = 1, чтобы сгенерировать новые значения свойств элемента вместе с for (var key in object), чтобы получить именованные записи массива из ваших исходных данных.

  • L oop через каждый элемент
  • извлекает индекс из имени свойства (в данном случае я использую .lastIndexOf, но .split будет работать так же хорошо, или регулярное выражение, если оно более сложнее, чем в приведенном примере)
  • убедитесь, что запись в результате существует в виде подмассива result[idx] = result[idx] || []
  • создайте новый объект для помещения в подмассив
  • используйте x["a"]=value, чтобы добавить именованные свойства в новый объект
  • добавить в подмассив

var data = [];
$(":input").each(function(index, value) {
  data[this.id] = $(this).val();
});
var result = [];
for (var key in data) {
  var idx = key.substr(key.lastIndexOf('_') + 1)
  result[idx] = result[idx] || [];
  var entry = {};
  entry[key] = data[key];
  result[idx].push(entry);
}
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="agent_dra_0" value="1">
<input id="agent_tie_0" value="2">
<input id="agent_dra_1" value="3">
<input id="agent_tie_1" value="4">
0 голосов
/ 21 апреля 2020

Вы должны построить массив объектов, а затем использовать массив, чтобы сгруппировать по номерам.

// Try edit message

let x = [
  {agent_dra_0: "0"},
  {agent_tie_0: "0"},
  {agent_tiger_0: "0"},
  {agent_userid_0: "2"},
  {agent_dra_1: "0"},
  {agent_tie_1: "k"},
  {agent_tiger_1: "1"},
  {agent_userid_1: "4"},
];

let xx = x.reduce((xx, item)=>{
  let key = Object.keys(item)[0].split('_').pop();

  xx[key] = (xx[key]) ? xx[key]:[];
  var a = Object.keys(item)[0];
  var b = {};
  b[a] = item[a];
  xx[key].push(b);
  return xx;
},{});
console.log(xx);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...