Проблема с array.reverse () в узле v12.6.0 - PullRequest
4 голосов
/ 17 февраля 2020

После обновления узла до последней версии мои тесты прерываются, говоря, что мой массив не меняется. У меня есть массив с 4 числами, и он говорит, что ожидает, что числа в моем массиве поменялись местами, но после запуска .reverse () он не делает то, что должен. Это новый тип проблемы с узлом?

  it(`should handle ${SORT_MEMBERS}`, () => {
    const members = [{ ssn: 7 }, { ssn: 6 }, { ssn: 5 }, { ssn: 4 }];

    const attr = 'ssn';
    const order = SORT_ORDER.ASC;

    let newState = reducer(state, {
      type: INIT_MEMBERS,
      payload: { members },
    });

    newState = reducer(newState, {
      type: SORT_MEMBERS,
      payload: { attr, order }
    });

    expect(newState).toEqual({
      ...state,
      members: members.reverse(),
      sort: { attr, order },
    });

  });

Исходное состояние:

const initialState = {
  batchUpdates: {
    salaryChangePercentage: '',
    applyDate: null,
  },
  form: {
    ableToWork: null,
    memberErrors: null,
  },
  updates: {}, // hash with ssn as key
  members: [],
  errors: {},
  sort: {
    attr: null,
    order: null,
  },
  saving: false,
  saved: false,
  saveResult: null,
  saveError: null,
};

case SORT_MEMBER:

 case SORT_MEMBERS:
      return {
        ...state,
        members: sortMembers(state.members, state.updates, action.payload.attr, action.payload.order),
        sort: {
          attr: action.payload.attr,
          order: action.payload.order,
        },
      };

И, наконец, мой метод сортировки:

export const sortMembers = (members, updates, attr, order) => {
  const sorted = members.slice();
  const path = attr.split('.');
  const byUpdates = path.length === 2 && path[0] === 'updates';

  if (!byUpdates) {
    return sorted.sort((a, b) => (
      order === SORT_ORDER.DESC ? a[attr] < b[attr] : a[attr] > b[attr]
    ));
  }
  // Sort by updates on given ssn
  return sorted.sort((a, b) => (
    order === SORT_ORDER.DESC
      ? updates[a.ssn][path[1]] < updates[b.ssn][path[1]] : updates[a.ssn][path[1]] > updates[b.ssn][path[1]]
  ));
};

Раньше он работал до того, как я обновил свой Node.js

1 Ответ

0 голосов
/ 18 февраля 2020

Я нашел решение проблемы!

В следующем коде есть неправильный стиль:

order === SORT_ORDER.DESC ? a[attr] < b[attr] : a[attr] > b[attr]

Должны быть - и +, а не> и <. Правильно следующее: </p>

order === SORT_ORDER.DESC ? a[attr] + b[attr] : a[attr] - b[attr]
...