Как удалить объект по свойству в JavaScript - PullRequest
0 голосов
/ 03 мая 2019

Я хотел бы знать, как удалить объект по свойству в объекте вложенного массива

У меня есть весь список объектов в sampleobj, сравнить каждый идентификатор с apitrans, apifund, если успех равен false, удалитьobj in sampleobj

Удалить объект, если успех ложный, в sampleobj.

Я попытался:

var result = sampleobj.foreach(e=>{
   if(e.id === "trans" && apitrans.success== true){
      Object.assign(e, apitrans);
   }
  if(e.id === "fund" && apifund.success== true){
      Object.assign(e, apifund);
   }

  // if success false remove the object.
})

//inputs scenario 1
var sampleobj=[{
    id: "trans",
    amount: "100",
    fee: 2
   },
   {
    id: "fund",
    amount: "200",
    fee: 2
   }]
var apitrans = 
  {
   success: true,
   id: "trans",
   tamount: "2000",
   fee: "12"
  }
var apifund =
  {
   success: false,
   id: "fund",
   tamount: "4000",
   fee: "10"
  } 

//inputs scenario 2 how to do same if property name differs
if error, status error, or success false remove obj in sampleobj

var sampleobj=[{
    id: "trans",
    amount: "100",
    fee: 2
   },
   {
    id: "fund",
    amount: "200",
    fee: 2
   },
{ id: "insta", amount: "400", fee: 2 }
]

var apitrans = {success: true,id: "trans",tamount: "2000",fee: "12"}
var apiinsta = { errors: [{code:"error.route.not.supported"}],id: "insta",tamount: "2000",fee: "12"}
var apifund = { status: "error", id: "fund", tamount: "4000", fee: "10" }

var sampleobj=[{
//Expected Output
result: [
  {
    id: "trans",
    amount: "100",
    fee: 2
  }
]```

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Вы можете использовать filter() для удаления элементов из массива.

  • Создайте вспомогательную функцию (func), которая принимает два объекта в качестве параметра, сравнивает id свойство обоих и проверяет success свойство одного из них.
  • Затем используйте filter() из данного массива и поместите оба объекта в массив [apitrans,apifund].
  • Затем используйте метод some() для [apitrans,apifund] и проверьте, есть ли у любого из них id, равный текущему элементу, с помощью вспомогательной функции.

var arr=[ { id: "trans", amount: "100", fee: 2 }, { id: "fund", amount: "200", fee: 2 } ]

var apitrans = {success: true,id: "trans",tamount: "2000",fee: "12"}
var apifund = { success: false, id: "fund", tamount: "4000", fee: "10" }

const func = (obj1,obj2) => obj1.id === obj2.id && obj2.success

const res = arr.filter(x => [apitrans,apifund].some(a => func(x,a)));
console.log(res)
0 голосов
/ 03 мая 2019

Вы можете отфильтровать ваш массив по условиям, т.е. фильтр даст вам новый массив вместо изменения исходного массива

var arr = [{
    id: "trans",
    amount: "100",
    fee: 2
  },
  {
    id: "fund",
    amount: "200",
    fee: 2
  }
]
var apitrans = {
  success: true,
  id: "trans",
  tamount: "2000",
  fee: "12"
}
var apifund = {
  success: false,
  id: "fund",
  tamount: "4000",
  fee: "10"
}



var filter = arr.filter(function(item) {
  //console.log(item);
  if (item.id === apitrans.id && apitrans.success) {
    return item
  }

});
console.log(filter);

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

var arr = [{
    id: "trans",
    amount: "100",
    fee: 2
  },
  {
    id: "fund",
    amount: "200",
    fee: 2
  }
]
var apitrans = {
  success: true,
  id: "trans",
  tamount: "2000",
  fee: "12"
}
var apifund = {
  success: false,
  id: "fund",
  tamount: "4000",
  fee: "10"
}


arr.forEach(e => {
  if (e.id === "trans" && apitrans.success == true) {
    Object.assign(e, apitrans);
  } else if (e.id === "fund" && apifund.success == true) {
    Object.assign(e, apifund);
  } else {
    // if success false remove the object.
    var index = arr.indexOf(e);
    arr.splice(index, 1);
  }
})
console.log("resulted original arr", arr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...