AngularJS - получить индекс последнего пустого элемента из массива - PullRequest
0 голосов
/ 27 апреля 2018
var caseOne = [
    {"name":"Felicity", "gender":"F", ...   ... ,"type":"Admin"},
    {"name":"Tony", "gender":"M", ...   ... ,"type":""},
    .
    .
    .
    .
    {"name":"Super Man", "gender":"M", ...   ... ,"type":""},
    {"name":"Wonder Women", "gender":"F", ...   ... ,"type":""},
    {"name":"Hulk", "gender":"M", ...   ... ,"type":"User"},
    {"name":"Loky", "gender":"M", ...   ... ,"type":"User"},
    {"name":"Thore", "gender":"M", ...   ... ,"type":"Admin"}
];

var caseTwo = [
    {"name":"Felicity", "gender":"F", ...   ... ,"type":"Admin"},
    {"name":"Tony", "gender":"M", ...   ... ,"type":""},
    .
    .
    .
    .
    {"name":"Super Man", "gender":"M", ...   ... ,"type":""},
    {"name":"Wonder Women", "gender":"F", ...   ... ,"type":""},
    {"name":"Hulk", "gender":"M", ...   ... ,"type":"User"},
    {"name":"Loky", "gender":"M", ...   ... ,"type":"User"},
    {"name":"Thore", "gender":"M", ...   ... ,"type":"Admin"},
    {"name":"Bat man", "gender":"M", ...   ... ,"type":""}
];

У меня есть такой массив. Я хочу, чтобы все записи после lastIndexOf "type":"" означали, что с cansOne он вернет последние 3 записи, а с caseTwo вернет 0 записей. короче все записи после "type":"". Может ли кто-нибудь помочь.

Заранее спасибо.

Ожидаемый результат

caseOne = [
    {"name":"Hulk", "gender":"M", ...   ... ,"type":"User"},
    {"name":"Loky", "gender":"M", ...   ... ,"type":"User"},
    {"name":"Thore", "gender":"M", ...   ... ,"type":"Admin"}
];

caseTwo = [];

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018
You can do it like this:

   var caseOne = [
                    {"name":"Felicity", "gender":"F","type":"Admin"},
                    {"name":"Tony", "gender":"M","type":""},
                    {"name":"Super Man", "gender":"M","type":""},
                    {"name":"Wonder Women", "gender":"F","type":""},
                    {"name":"Hulk", "gender":"M","type":"User"},
                    {"name":"Loky", "gender":"M","type":"User"},
                    {"name":"Thore", "gender":"M","type":"Admin"}
                ];
                var result =[];
                var counterIndex = 0;
                for(var i=0; i<caseOne.length; i++) {
                    if(caseOne[i].type == '')
                    counterIndex++;
                }
                result = caseOne.splice(counterIndex+1, caseOne.length);
            console.log(result);
0 голосов
/ 27 апреля 2018

Что решат эти элементы массива? Так как, вероятно, есть лучший способ, чем поиск по массиву, чтобы найти все после определенного элемента. В любом случае, вы ищете код, подобный:

// source data
const source = [
    {"name":"Felicity", "gender":"F", "type":"Admin"},
    {"name":"Tony", "gender":"M", "type":""},
    {"name":"Super Man", "gender":"M", "type":""},
    {"name":"Wonder Women", "gender":"F", "type":""},
    {"name":"Hulk", "gender":"M", "type":"User"},
    {"name":"Loky", "gender":"M", "type":"User"},
    {"name":"Thore", "gender":"M", "type":"Admin"}
];
const lastIndex = Array
	.from( source ) // Clone the array so reversing does not affect the source.
	.reverse() // Reverse the array so we can use findIndex instead of writing findLastIndex ourselves.
	.findIndex( entry => !entry.type ); // Get the index of the first element that has no type.
const result = source.slice( source.length - lastIndex, source.length ); // Slice the orginal array.
console.log( result );
0 голосов
/ 27 апреля 2018

Создайте повторно используемую функцию getIndex(), которая примет параметр массива и даст вам последний индекс объекта с type: "". Используя этот индекс, вы можете splice() получить результат и получить желаемый результат

var caseOne = [
    {"name":"Felicity", "gender":"F" ,"type":"Admin"},
    {"name":"Tony", "gender":"M","type":""},
    {"name":"Super Man", "gender":"M","type":""},
    {"name":"Wonder Women", "gender":"F" ,"type":""},
    {"name":"Hulk", "gender":"M","type":"User"},
    {"name":"Loky", "gender":"M" ,"type":"User"},
    {"name":"Thore", "gender":"M" ,"type":"Admin"}
];

var caseTwo = [
    {"name":"Felicity", "gender":"F" ,"type":"Admin"},
    {"name":"Tony", "gender":"M" ,"type":""},
    {"name":"Super Man", "gender":"M" ,"type":""},
    {"name":"Wonder Women", "gender":"F","type":""},
    {"name":"Hulk", "gender":"M","type":"User"},
    {"name":"Loky", "gender":"M","type":"User"},
    {"name":"Thore", "gender":"M","type":"Admin"},
    {"name":"Bat man", "gender":"M","type":""}
];

function getIndex(caseArray){
  var arrayIndex;
  caseArray.forEach(function(caseOneObj, index){
    if(caseOneObj.type === ''){
      arrayIndex = index;
    }
  });
  return arrayIndex;
}

var index = getIndex(caseOne);
var resultCaseOne = caseOne.splice(index+1, caseOne.length);
console.log('-----caseOne-----');
console.log(resultCaseOne);

index = getIndex(caseTwo);
var resultCaseTwo = caseTwo.splice(index+1, caseTwo.length);
console.log('-----caseTwo-----');
console.log(resultCaseTwo);

Но, если у вас есть массив объектов, которые, скорее всего, имеют type:'' в последнем из массива, вы можете искать этот индекс, начиная с последнего объекта этого массива, например:

var caseOne = [
    {"name":"Felicity", "gender":"F" ,"type":"Admin"},
    {"name":"Tony", "gender":"M","type":""},
    {"name":"Super Man", "gender":"M","type":""},
    {"name":"Wonder Women", "gender":"F" ,"type":""},
    {"name":"Hulk", "gender":"M","type":"User"},
    {"name":"Loky", "gender":"M" ,"type":"User"},
    {"name":"Thore", "gender":"M" ,"type":"Admin"}
];

var caseTwo = [
    {"name":"Felicity", "gender":"F" ,"type":"Admin"},
    {"name":"Tony", "gender":"M" ,"type":""},
    {"name":"Super Man", "gender":"M" ,"type":""},
    {"name":"Wonder Women", "gender":"F","type":""},
    {"name":"Hulk", "gender":"M","type":"User"},
    {"name":"Loky", "gender":"M","type":"User"},
    {"name":"Thore", "gender":"M","type":"Admin"},
    {"name":"Bat man", "gender":"M","type":""}
];

function getIndex(caseArray){
  var i;
  for(i=caseArray.length-1; i>0; i--){
   if(caseArray[i].type === ''){
      break;
    }
  }
  return i;
}

var index = getIndex(caseOne);
var resultCaseOne = caseOne.splice(index+1, caseOne.length);
console.log('-----caseOne-----');
console.log(resultCaseOne);

index = getIndex(caseTwo);
var resultCaseTwo = caseTwo.splice(index+1, caseTwo.length);
console.log('-----caseTwo-----');
console.log(resultCaseTwo);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...