Извлечение объектов из списка объектов на основе выбранных ключей - PullRequest
0 голосов
/ 14 мая 2018

У меня есть список фруктов.Например,

var Fruits={
        "Banana": {
            "Price": "50",
            "quility": "good"
        },
        "Mango": {
            "Price": "100",
            "quility": "best"
        },
        "Orange": {
            "Price": "80",
            "quility": "good"
        },
        "Apple": {
            "Price": "150",
            "quility": "best"
        }
    }

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

var SpecificFruits = ["Banana", "Mango"]

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

var results={
        "Banana": {
            "Price": "50",
            "quility": "good"
        },
        "Mango": {
            "Price": "100",
            "quility": "best"
            "quility": "best"
        }
    }

Любая помощь / предложение будут оценены.

Ответы [ 6 ]

0 голосов
/ 14 мая 2018

ES6

Вы также можете использовать reduce() и Object.assign(), чтобы получить требуемый результат.

DEMO

var Fruits={"Banana": {"Price": "50","quility": "good"},"Mango": {"Price": "100","quility": "best"},"Orange": {"Price": "80","quility": "good"},"Apple": {"Price": "150","quility": "best"}},
    SpecificFruits = ["Banana", "Mango"];

let result = SpecificFruits.reduce((r,v)=>Object.assign(r,(Fruits[v]?{[v]:Fruits[v]}:{})),{});

console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 14 мая 2018
var SpecificFruits = ["Banana", "Mango"];

var result = {};
SpecificFruits.forEach(function(fruit) {
  if( fruits[ fruit ] ){
    result[ fruit ] = fruits[fruit];
  }
});
0 голосов
/ 14 мая 2018
var fruits={
    "Banana": {
        "Price": "50",
        "quility": "good"
    },
    "Mango": {
        "Price": "100",
        "quility": "best"
    },
    "Orange": {
        "Price": "80",
        "quility": "good"
    },
    "Apple": {
        "Price": "150",
        "quility": "best"
    }
}

var SpecificFruits = ["Banana", "Mango"];
var result = {};

SpecificFruits.forEach( function( fruit ){
    if( fruits[ fruit ] ){
        result[ fruit ] = fruits[ fruit ];
    }
});

console.log( result );
0 голосов
/ 14 мая 2018

Вы можете использовать метод _.pick, передав начальный объект и массив требуемых свойств.

var Fruits={ "Banana": { "Price": "50", "quility": "good" }, "Mango": { "Price": "100", "quility": "best" }, "Orange": { "Price": "80", "quility": "good" }, "Apple": { "Price": "150", "quility": "best" } }
    
var SpecificFruits = ["Banana", "Mango"]
var result = _.pick(Fruits ,SpecificFruits);
console.log(result);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>

Другой метод - использовать метод reduce для написания чистого решения без какой-либо библиотеки.

var Fruits = {"Banana":{"Price":"50","quility":"good"},"Mango":{"Price":"100","quility":"best"},"Orange":{"Price":"80","quility":"good"},"Apple":{"Price":"150","quility":"best"}}
var SpecificFruits = ["Banana", "Mango"]

var result = SpecificFruits.reduce((fruits, elem) => { fruits[elem] = Fruits[elem]; return fruits; }, {});
console.log(result);
0 голосов
/ 14 мая 2018

Вы можете достичь этого, просто выполнив:

let result = {}
SpecificFruits.forEach((fruit) => {
  if(Fruits[fruit]) {
    result[fruit] = Fruits[fruit]
  }
})
0 голосов
/ 14 мая 2018

Вы можете использовать _.pick метод, который берет объект и массив ключей и возвращает новый объект со свойствами из массива.

var Fruits = {"Banana":{"Price":"50","quility":"good"},"Mango":{"Price":"100","quility":"best"},"Orange":{"Price":"80","quility":"good"},"Apple":{"Price":"150","quility":"best"}}

var SpecificFruits = ["Banana", "Mango"]
const result = _.pick(Fruits, SpecificFruits);
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
...