Удаление свойств объекта, начиная с параметра - PullRequest
0 голосов
/ 03 мая 2018

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

deletePropsThatStarsWith({a:1, b:2, aa:3}, 'a') //ouputs {b:2}

Пока это то, что работает, но я не знаю, куда мне нужно идти.

var obj = { a: 1, b: 2, aa: 3 }

function deletePropsThatStartsWith(object, prop) {
  return _.omit(object, prop)
}

console.log(deletePropsThatStartsWith(obj, 'a'))
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>

Спасибо за помощь / советы.

Ответы [ 5 ]

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

Вы можете сделать это с помощью простого цикла for..in:

function deletePropsThatStartsWith(object, prop) {
  let copy = {};
  for (key in object) {
    if (!key.startsWith(prop)) 
      copy[key] = object[key]
  };
  return copy;
}

var obj = { a: 1, b: 2, aa: 3 }

console.log(deletePropsThatStartsWith(obj, "a"));
0 голосов
/ 03 мая 2018

    // without lodash
    function deletePropsThatStartsWith(obj, prop) {
      var keys = Object.keys(obj);
      var newObj = {};
      for(var i = 0;i < keys.length;i++){
        if(keys[i][0] !== prop){
          newObj[keys[i]] = obj[keys[i]]
        }
      }
      return newObj;
    }
    console.log(deletePropsThatStartsWith({a:1,b:2,aa:3},'a'));
0 голосов
/ 03 мая 2018

Вам не нужно lodash для этого, попробуйте реализовать это самостоятельно:

function deletePropsThatStartsWith(object, letter) {
    var newObjc = {}
    Object.keys(object).forEach((key) => {
        if (!key.startsWith(letter)) {
            newObjc = { ...newObjc, [key]: object[key] }
        }
    })

    return newObjc
}

const objc = { a: 1, b: 2, aa: 3 }
console.log(deletePropsThatStartsWith(objc, 'a'))

Выход { b: 2 }

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

Кроме того, вы можете получить ключи объекта и вообще не использовать lodash. Это встроено в vanilla js (мой любимый фреймворк JS!)

function deletePropsThatStartsWith(oldObject, prop) {
  let newObject = {};
  Object.keys(oldObject).forEach(k => {
    if (k.startsWith(prop)) continue;
    newObject[k] = oldObject[k];
  });
  return newObject;
};
0 голосов
/ 03 мая 2018

Вы ищете метод lodash _.omitBy. Вы можете передать обратный вызов для второго параметра, который решает, какие свойства пропустить. Обратный вызов будет вызываться с двумя аргументами, value и key.

Так что для вашего примера все, что вам нужно, это проверить ключ и посмотреть, начинается ли он с нужной строки. Метод .startsWith будет хорошим выбором, или, если вы не можете его использовать, сам lodash предоставляет метод _.startsWith.

Пример:

var obj = {a: 1, b: 2, aa: 3}

function deletePropsThatStartsWith(object, prop) {
  return _.omitBy(object, (v, k) => k.startsWith(prop))
}

console.log(deletePropsThatStartsWith(obj, 'a'))
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
...