Найти массив объектов в следующем массиве для замены - PullRequest
1 голос
/ 13 июля 2020

У меня есть два объекта массивов ниже. Я хочу найти все эти идентификаторы первого массива и сделать их активными во втором массиве объекта, а остальные должны стать нулевыми в свойствах статуса.

var searchIDs = [{ "id":"6001", "other" : "..." }, 
{ "id":"6002", "other" : "..."}] 

var list = [ 
    {"id":"9666", "status":"active"},
    {"id":"9667", "status":"none"},
    {"id":"9999", "status":"none"},
    {"id":"9668", "status":"none"},
    {"id":"9669", "status":"active"},
    {"id":"6001", "status":"none"},
    {"id":"6002", "status":"none"},
    {"id":"6003", "status":"none"},
    {"id":"6004", "status":"none"},
    {"id":"6005", "status":"active"},
    {"id":"6006", "status":"none"},
    {"id":"6007",  "status":"none"},
    {"id":"6008",  "status":"none"},
    {"id":"6009",  "status":"none"}
]



for (var i = 0 ; i < searchIDs.length ; i ++) {

    list.find(v => v.id !== searchIDs[i].id).status = "none";
    list.find(v => v.id === searchIDs[i].id).status = "active";
    Array.prototype.push.apply(list); 


}



console.log('Final List : '  + JSON.stringify(list)); 

Но когда я пытаюсь найти функцию с для циклов это пока не работает. Как я мог это решить? Благодарю за чтение моих вопросов! спасибо!

Окончательный результат должен быть


[ 
    {"id":"9666", "status":"none"},
    {"id":"9667", "status":"none"},
    {"id":"9999", "status":"none"},
    {"id":"9668", "status":"none"},
    {"id":"9669", "status":"none"},
    {"id":"6001", "status":"active"},
    {"id":"6002", "status":"active"},
    {"id":"6003", "status":"none"},
    {"id":"6004", "status":"none"},
    {"id":"6005", "status":"none"},
    {"id":"6006", "status":"none"},
    {"id":"6007",  "status":"none"},
    {"id":"6008",  "status":"none"},
    {"id":"6009",  "status":"none"}
]
    

Ответы [ 4 ]

1 голос
/ 13 июля 2020

Если я правильно понял вопрос. это может быть то, что вы ищете

var searchIDs = [
    { "id":"6001", "other" : "..." }, 
    { "id":"6002", "other" : "..."}
] 

var list = [ 
    {"id":"9666", "status":"active"},
    {"id":"9667", "status":"none"},
    {"id":"9999", "status":"none"},
    {"id":"9668", "status":"none"},
    {"id":"9669", "status":"active"},
    {"id":"6001", "status":"none"},
    {"id":"6002", "status":"none"},
    {"id":"6003", "status":"none"},
    {"id":"6004", "status":"none"},
    {"id":"6005", "status":"active"},
    {"id":"6006", "status":"none"},
    {"id":"6007",  "status":"none"},
    {"id":"6008",  "status":"none"},
    {"id":"6009",  "status":"none"}
]

// This line creates a new array with only the id's in it
const ids = searchIDs.map(line => line.id)


// We will map this array
// if the this line id appears in the ids list we can set the status to active. otherwise to none
var newList = list.map(line => {
  // you could also use .includes
  line.status = ids.indexOf(line.id) > -1 ? 'active' : 'none';
  return line;
})

console.log(newList)
0 голосов
/ 13 июля 2020

Публикация с очень базовым c подходом, как показано ниже, надеюсь, это вам поможет.

var searchIDs = [{ "id":"6001", "other" : "..." }, 
    { "id":"6002", "other" : "..."}] 
    
    var list = [ 
        {"id":"9666", "status":"active"},
        {"id":"9667", "status":"none"},
        {"id":"9999", "status":"none"},
        {"id":"9668", "status":"none"},
        {"id":"9669", "status":"active"},
        {"id":"6001", "status":"none"},
        {"id":"6002", "status":"none"},
        {"id":"6003", "status":"none"},
        {"id":"6004", "status":"none"},
        {"id":"6005", "status":"active"},
        {"id":"6006", "status":"none"},
        {"id":"6007",  "status":"none"},
        {"id":"6008",  "status":"none"},
        {"id":"6009",  "status":"none"}
    ]
    
    let newsearchIds = [];
    
    for (var i = 0 ; i < searchIDs.length ; i ++) {
        for(let key in searchIDs[i]){
            newsearchIds.push(searchIDs[i][key]);
        }
    }
    
    for (var i = 0 ; i < list.length ; i ++) {
        for (var j = 0 ; j < newsearchIds.length ; j ++) {
            if(list[i].id === newsearchIds[j]){
                list[i].status= "active";
            }
        }
    }
    console.log(list);
0 голосов
/ 13 июля 2020

Это работает.

  var searchIDs = [
   { "id":"6001", "other" : "..." }, 
   { "id":"6002", "other" : "..."}
  ] 
  var list = [ 
    {"id":"9666", "status":"active"},
    {"id":"9667", "status":"none"},
    {"id":"9999", "status":"none"},
    {"id":"9668", "status":"none"},
    {"id":"9669", "status":"active"},
    {"id":"6001", "status":"none"},
    {"id":"6002", "status":"none"},
    {"id":"6003", "status":"none"},
    {"id":"6004", "status":"none"},
    {"id":"6005", "status":"active"},
    {"id":"6006", "status":"none"},
    {"id":"6007",  "status":"none"},
    {"id":"6008",  "status":"none"},
    {"id":"6009",  "status":"none"}
  ]

  let resArr =  list.map(function(item){
     let obj = item;
     if(searchIDs.find(x => x.id == item.id)){
       obj.status = "active";
     }else{
       obj.status = "none";
     }
     return obj;
  });
  console.log(resArr);
0 голосов
/ 13 июля 2020

Я бы посоветовал искать элементы в первом списке (searchID) в вызове Array.map во втором списке (списке), мы по сути проверяем, является ли каждый член списка также член searchID.

Это может быть не очень эффективным, если searchID очень большие, поэтому можно создать Set и проверить членство, используя Set.has .

var searchIDs = [{ "id":"6001", "other" : "..." }, 
{ "id":"6002", "other" : "..."}] 

var list = [ 
    {"id":"9666", "status":"active"},
    {"id":"9667", "status":"none"},
    {"id":"9999", "status":"none"},
    {"id":"9668", "status":"none"},
    {"id":"9669", "status":"active"},
    {"id":"6001", "status":"none"},
    {"id":"6002", "status":"none"},
    {"id":"6003", "status":"none"},
    {"id":"6004", "status":"none"},
    {"id":"6005", "status":"active"},
    {"id":"6006", "status":"none"},
    {"id":"6007",  "status":"none"},
    {"id":"6008",  "status":"none"},
    {"id":"6009",  "status":"none"}
]


list = list.map(r => { 
    return { id: r.id, status: searchIDs.find(s => s.id === r.id) ? "active": "none" };
})

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