Удаление объектов в объекте в массиве JavaScript

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

{nodeVoltages: Array(11), totalPower: Array(1), xlength: Array(11)}
  nodeVoltages: Array(11)
    0:48
    1:47.71306060387108
    2:47.250273223993105
    3:46.59686907269243
    4:45.71876416434013
    5:44.53304242029258
    6:42.745236969423615
    7:Complex {re: 40.38334500994142, im:1.919295696316476, __ember1513267958317: "ember368"}
    8:Complex { re:39.55961661806138, im:3.8933604519196416, __ember1513267958317: "ember369"}

Этот массив создается динамически с помощью некоторой математики, которую я придумал, поэтому я не могу предоставить вам никаких входных данных. Я пытаюсь сделать приведенный выше массив выглядеть так:

{nodeVoltages: Array(11), totalPower: Array(1), xlength: Array(11)}
  nodeVoltages: Array(11)
    0:48
    1:47.71306060387108
    2:47.250273223993105
    3:46.59686907269243
    4:45.71876416434013
    5:44.53304242029258
    6:42.745236969423615
    7:40.38334500994142
    8:39.55961661806138

Используя mathjs, я смог оценить свои выражения и динамически добавить значения в массив с помощью команды array.push и отобразить их. Однако мой код ломается, когда в результатах моего массива появляются мнимые значения.

Как я могу удалить эти мнимые числа из моего массива? Другими словами, мне нужно удалить части "im:" значений, когда они начинают появляться, прежде чем я добавлю их в отображаемый массив.

Я попытался сделать это с помощью некоторого кода, который я нашел из предыдущего ответа на чей-то вопрос ( Как мне удалить конкретный элемент из массива в JavaScript?) Командой склейки:

      var nodeVoltage2 = parser.eval(expression2);

//checks if there are imaginary values and removes them

            if ("im" in nodeVoltage2) {
              nodeVoltage2.splice(2,1)
            }

//adds value to result array for analysis

      nodeVoltages.push(nodeVoltage2);

но в консоли возвращается, что "я не определен".

Любая помощь очень ценится!

1 ответ

Решение

Вы можете использовать массив map функция. По сути, мы перебираем массив. Если предмет имеет .re свойство, мы берем только это значение. Если нет .re свойство, мы сохраняем значение как есть.

Мы можем написать это в краткой записи, как с result используя троичный оператор и функцию стрелки, или мы можем написать это немного более многословно, но традиционным способом, как с resultTwo

let data = [
    48
    ,47.71306060387108
    ,47.250273223993105
    ,46.59686907269243
    ,45.71876416434013
    ,44.53304242029258
    ,42.745236969423615
    ,{re: 40.38334500994142, im:1.919295696316476, __ember1513267958317: "ember368"}
    ,{ re:39.55961661806138, im:3.8933604519196416, __ember1513267958317: "ember369"}
]

let result = data.map((x) => x && x.re ? x.re : x);


let resultTwo = data.map(function(elem) {
    // First, we need to check that the array element is not null / undefined
    // We then need to check that it has a property called re that is also not null / undefined
    if (elem != null && elem.re != null) {
        // Just return the property we're interested in
        return elem.re;
    } else {
        // Return the element as is
        return elem;
    }
});

console.log(result);
console.log(resultTwo);

Другие вопросы по тегам