jQuery изменить значения любого ключа массива объектов - PullRequest
1 голос
/ 07 апреля 2020

У меня есть массив, импортированный через AJAX. Я хочу создать новый массив на основе исходного и просканировать весь новый массив, чтобы очистить значение WHATEVER от ключа, связанного с ним.

Импортированный набор данных выглядит следующим образом:

[
    {id:"1", color:"red_blue", height:"100_200" },
    {id:"2", color:"green", height:"100_20" },
    {id:"3", color:"orange_yellow", height:"50" }
]

И процесс jQuery выглядит следующим образом

dataSet = JSON.parse(response);

// create a new array based on the imported array
var row = 0;

$.each(dataSet, function(key, value) {
    cleanDataSet.push(dataSet[row]);
    row++;
});

// clean the new array
var row = 0;

// Go through each row of the array
$.each(cleanDataSet, function(key, value) {

    // Go through each key and value of this array
    $.each(cleanDataSet[row], function(key, value) {
        var myVariable = thisValueWhateverTheKey.split('_');

        // if a split is detected in the value
        if (myVariable[1]) {
            // Update the value 
            thisValueWhateverTheKey = myVariable[0];
        }
        row++;
    });
});

console.log(cleanDataSet)

Часть "thisValueWhateverTheKey", очевидно, я не могу понять. Это просто, когда я нацеливаюсь на значения определенной клавиши c (я бы использовал "value.nameofmykey", но не так много, когда нацеливаюсь на любое значение любой клавиши. Одно только значение "не будет работать".

Ответы [ 4 ]

1 голос
/ 07 апреля 2020

const data = [
  {
    id: "1",
    color: "red_blue",
    height: "100_200"
  },
  {
    id: "2",
    color: "green",
    height: "100_20"
  },
  {
    id: "3",
    color: "orange_yellow",
    height: "50"
  }
];

var clean = data.map(item => Object.fromEntries(
  Object.keys(item).map(key => [key, item[key].split('_')[0]])
));

console.log(clean);
1 голос
/ 07 апреля 2020

Я думаю, что ваш код / ​​вопрос немного сбивает с толку - если я правильно понимаю, вы хотите что-то подобное. Обратите внимание, что функция map создает новый массив, заполненный результатами вызова предоставленной функции для каждого элемента в вызывающем массиве. например,

const data = [{
    id: "1",
    color: "red_blue",
    height: "100_200"
  },
  {
    id: "2",
    color: "green",
    height: "100_20"
  },
  {
    id: "3",
    color: "orange_yellow",
    height: "50"
  }
]

const clean = data.map(x => {
  // x is each object in the original array
  // i.e. data[0], data[1], etc
  for (y in x) {
   // y is each property in the object 
   // e.g. data[0]["id"], data[0]["color"], etc
   // so here we are setting the value of each property of each object
   x[y] = x[y].split('_')[0]
  }

  // finally return each modified object
  return x;
})

// so clean is a new array based on data
// where each property has been set to the correct value
console.log(clean)

Если это не так, не могли бы вы отредактировать свой вопрос, чтобы включить и пример того, как вы хотите, чтобы данные выглядели - т.е. до / после.

1 голос
/ 07 апреля 2020

Вы можете использовать value напрямую, наиболее вероятно, что вы запутались, используя key, value в обоих циклах. Также обратите внимание, что вы разделяете на двойное подчеркивание __, которое должно быть одинарным _ согласно вашим данным.

Вот как вы можете упростить:

$.each(cleanDataSet, function(index, cleanDataSetRow){  

   // Go through each key and value of this array

    $.each(cleanDataSetRow, function(key, value){ 

        var myVariable = value.split('_');

        // if a split is detected in the value

        if(myVariable[1]){

            // Update the value 
            cleanDataSetRow[key] = myVariable[0];

        }

    });
});
0 голосов
/ 07 апреля 2020

Когда вы перебираете каждый объект, используйте Object.entries() и уничтожаете каждую запись (например, [key, value]):

...
Object.entries(obj).forEach(([key, val]) => {
  if (val === value) {
    obj[key] = ''
  }
... 

let data = [
    {id:"1", color:"red_blue", height:"100_200" },
    {id:"2", color:"green", height:"100_20" },
    {id:"3", color:"orange_yellow", height:"50" }
];

function removeValue(objectArray, value) {
  objectArray.forEach(obj => {
    Object.entries(obj).forEach(([key, val]) => {
      if (val === value) {
        obj[key] = '';
      }
    });
  });
  return objectArray;
}

console.log(removeValue(data, "100_20"));
console.log(removeValue(data, "orange_yellow"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...