将数组分类为两个单独的动物名称数组,softAnimals 和 notSoftAnimals



为如何编写一个函数来正确分类这个数组到两个单独的数组中而苦苦挣扎。我不知道从这里开始该去哪里,我知道我可能需要使用 sort 方法,但我不知道如何正确编写它,我只使用 JS 几个星期。

let mixedUpAnimals = [
{name: 'chinchilla', soft: true},
{name: 'armadillo', soft: false},
{name: 'bear', soft: true},
{name: 'porcupine', soft: false},
{name: 'hedgehog', soft: false},
{name: 'honey badger', soft: false},
{name: 'mouse', soft: true}
]
for(var i = 0; i < mixedUpAnimals.length; i++){
if (mixedUpAnimals[i].soft === true);

首先,您可以sort然后filter元素(分别用于理解排序和过滤方法(:

let mixedUpAnimals = [
{name: 'chinchilla', soft: true},
{name: 'armadillo', soft: false},
{name: 'bear', soft: true},
{name: 'porcupine', soft: false},
{name: 'hedgehog', soft: false},
{name: 'honey badger', soft: false},
{name: 'mouse', soft: true}
]
mixedUpAnimals.sort(function(a , b) {
return a.name > b.name;
});
var softAnimals = mixedUpAnimals.filter(function (el) {
return el.soft });
var notSoftAnimals = mixedUpAnimals.filter(function (el) {
return !el.soft });

console.log( softAnimals);
console.log( notSoftAnimals);

排序后,您也可以在一次迭代中进行分离。

let mixedUpAnimals = [
{name: 'chinchilla', soft: true},
{name: 'armadillo', soft: false},
{name: 'bear', soft: true},
{name: 'porcupine', soft: false},
{name: 'hedgehog', soft: false},
{name: 'honey badger', soft: false},
{name: 'mouse', soft: true}
],
sortCb = (x, y)=> x.name.localeCompare(y.name),
separate = A => A.reduce((a, e) => ((e.soft && a.s || a.ns).push(e), a), {s: [], ns: []}),
{s, ns} = separate(mixedUpAnimals.sort(sortCb));

console.log('Soft: ', s);
console.log('Non soft: ', ns);

你也可以避免在开头排序,在子数组中找到正确的索引,并将子数组中的项目放在适当的索引处,即使它是多次搜索,但请记住我们正在较小的数组中搜索,所以整个操作,(包括排序和分离(将具有更少的复杂性和更快的速度。 这是版本:

let mixedUpAnimals = [
{name: 'chinchilla', soft: true},
{name: 'armadillo', soft: false},
{name: 'bear', soft: true},
{name: 'porcupine', soft: false},
{name: 'hedgehog', soft: false},
{name: 'honey badger', soft: false},
{name: 'mouse', soft: true}
],
separate = A => A.reduce((a, e) => {
let t = (e.soft && a.s || a.ns),
idx = t.findIndex(v=> v.name.localeCompare(e.name) > 0);
t.splice(idx < 0 ? t.length : idx, 0 , e);
return a;
}, {s: [], ns: []}),
{s, ns} = separate(mixedUpAnimals);


console.log('Soft: ', s);
console.log('Non soft: ', ns);

const soft = mixedUpAnimals.filter(animal => animal.soft);
const notSoft = mixedUpAnimals.filter(animal => !animal.soft);

let mixedUpAnimals = [
{name: 'chinchilla', soft: true},
{name: 'armadillo', soft: false},
{name: 'bear', soft: true},
{name: 'porcupine', soft: false},
{name: 'hedgehog', soft: false},
{name: 'honey badger', soft: false},
{name: 'mouse', soft: true}
]
let softAnimals = [];
let notSoftAnimals =[];
mixedUpAnimals.map((item) => { 
item.soft ? softAnimals.push(item) : notSoftAnimals.push(item)
});
function sortArrayOfObject(items){
return items.sort((a, b)=> {
var nameA = a.name.toUpperCase(); // ignore upper and lowercase
var nameB = b.name.toUpperCase(); // ignore upper and lowercase
if (nameA < nameB) return -1;
if (nameA > nameB) return 1;
return 0;
});
}
console.log(sortArrayOfObject(softAnimals))
console.log(sortArrayOfObject(notSoftAnimals))

您可以使用 sort(( 方法

const mixedUpAnimals = [
{name: 'chinchilla', soft: true},
{name: 'armadillo', soft: false},
{name: 'bear', soft: true},
{name: 'porcupine', soft: false},
{name: 'hedgehog', soft: false},
{name: 'honey badger', soft: false},
{name: 'mouse', soft: true}
];
const sortedAnimals = mixedUpAnimals.sort((a, b) => (a.soft < b.soft) ? 1 : -1);
console.log(sortedAnimals);

这样,有soft: true的动物将处于领先地位。如果您需要颠倒顺序,只需反转<符号即可。

最新更新