如何在多个数组上映射元素值

问题描述 投票:1回答:3

这些是几个数组名称:

var Transport = ['Bus', 'Car', 'Truck', 'Train'];
var Fruits = ['Apple', 'Banana', 'Grape'];
var Animals = ['Dog', 'Cat', 'Horse', 'Sheep'];

我有一个像这样的结果集:

var x = [
            {'name': 'Bus'},
            {'name': 'Banana'},
            {'name': 'Car'},
            {'name': 'Dog'},
            {'name': 'Truck'},
            {'name': 'Cat'}
          ];

现在我想要什么一些逻辑返回哪个元素取决于哪个类别。示例是这样的

//what I want: 
var newresultTransport = ['Bus', 'Car', 'Truck'];
var newresultAnimal = ['Dog', 'Cat'];
var newresultFruits = ['Banana'];

任何帮助表示赞赏

javascript algorithm
3个回答
3
投票

您可以为组使用对象,单个值和结果。然后生成一个哈希表以获取每个名称的组,并使用它在结果集中创建一个组并将名称推送到该组。

var groups = { transport: ['Bus', 'Car', 'Truck', 'Train'], fruits: ['Apple', 'Banana', 'Grape'], animals: ['Dog', 'Cat', 'Horse', 'Sheep'] },
    array = [{ name: 'Bus' }, { name: 'Banana' }, { name: 'Car' }, { name: 'Dog' }, { name: 'Truck' }, { name: 'Cat' }],
    hash = {},
    grouped = {};

Object.keys(groups).forEach(function (k) {
    groups[k].forEach(function (a) {
        hash[a] = k;
    });
});

array.forEach(function (o) {
    var k = hash[o.name];
    grouped[k] = grouped[k] || [];
    grouped[k].push(o.name);
});

console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

2
投票

首先使用xmap转换为字符串数组

x = x.map( s => s.name ) ;

现在使用filter

newresultTransport = Transport.filter( s => x.indexOf( s ) != -1 );

同样适用于水果和动物

newresultAnimal = Fruits.filter( s => x.indexOf( s ) != -1 );
newresultFruits = Animals.filter( s => x.indexOf( s ) != -1 );

演示

var Transport = ['Bus', 'Car', 'Truck', 'Train'];
var Fruits = ['Apple', 'Banana', 'Grape'];
var Animals = ['Dog', 'Cat', 'Horse', 'Sheep'];
var x = [
  {'name': 'Bus'},
  {'name': 'Banana'},
  {'name': 'Car'},
  {'name': 'Dog'},
  {'name': 'Truck'},
  {'name': 'Cat'}
];
x = x.map( s => s.name ) ;
var newresultTransport = Transport.filter( s => x.indexOf( s ) != -1 );
var newresultAnimal = Fruits.filter( s => x.indexOf( s ) != -1 );
var newresultFruits = Animals.filter( s => x.indexOf( s ) != -1 );
   
console.log( newresultTransport , newresultAnimal , newresultFruits  );

0
投票

在您的问题中创建var“x”时:

var x = [
{'name': 'Bus'},
{'name': 'Banana'},
{'name': 'Car'},
{'name': 'Dog'},
{'name': 'Truck'},
{'name': 'Cat'}
]

1)你省略了类别。您可以修改“x”以包含每个对象的“类别”属性。

var x = [
{'name': 'Bus', 'category':'transport'},
{'name': 'Banana', 'category':'fruit'},
{'name': 'Car', 'category':'transport'},
{'name': 'Dog', 'category':'animal'},
{'name': 'Truck', 'category':'transport'},
{'name': 'Cat', 'category':'animal'}
]

2)然后,您可以使用过滤器将阵列过滤到所需的类别。例:

var x = [
{'name': 'Bus', 'category':'transport'},
{'name': 'Banana', 'category':'fruit'},
{'name': 'Car', 'category':'transport'},
{'name': 'Dog', 'category':'animal'},
{'name': 'Truck', 'category':'transport'},
{'name': 'Cat', 'category':'animal'}
]

const justTransport = x.filter(function(el){
    return el.category === "transport"
});

console.log(justTransport);
© www.soinside.com 2019 - 2024. All rights reserved.