Мой код JavaScript:

<script type="text/javascript">
    var photo = {"cover1":"arsenal.jpg", "cover2":"liverpool.jpg"};
    var photoList = [
        {"id":1, "name":"chelsea.jpg"},
        {"id":2, "name":"mu.jpg"},
        {"id":3, "name":"arsenal.jpg"},
        {"id":4, "name":"city.jpg"},
        {"id":5, "name":"liverpool.jpg"}
    ];
    for (var i = 0; i < photoList.length; i++) { 
        if(photoList[i].name == photo.cover1 || photoList[i].name == photo.cover2) {
            console.log(photoList[i].id)
        }
    }
    // I want to store it in array like this = [3,5]
</script>

Результат console.log(photoList[i].id) равен 3 и 5.

Я хочу сохранить его в массиве так: [3,5]. Так что, если он удовлетворяет условию if, то значение сохраняется в массиве

Как я могу это сделать?

0
Success Man 1 Мар 2018 в 16:31

7 ответов

Лучший ответ

Вы можете создать массив и вставить его.

<script type="text/javascript">
    var photo = {"cover1":"arsenal.jpg", "cover2":"liverpool.jpg"};
    var photoList = [
        {"id":1, "name":"chelsea.jpg"},
        {"id":2, "name":"mu.jpg"},
        {"id":3, "name":"arsenal.jpg"},
        {"id":4, "name":"city.jpg"},
        {"id":5, "name":"liverpool.jpg"}
    ];
    var result = []
    for (var i = 0; i < photoList.length; i++) { 
        if(photoList[i].name == photo.cover1 || photoList[i].name == photo.cover2) {
            result.push(photoList[i].id);
        }
    }
    // I want to store it in array like this = [3,5]
</script>
1
pritesh 1 Мар 2018 в 13:34

Попробуйте следующее с Array 's map() и filter():

var photo = {"cover1":"arsenal.jpg", "cover2":"liverpool.jpg"};
var photoList = [
    {"id":1, "name":"chelsea.jpg"},
    {"id":2, "name":"mu.jpg"},
    {"id":3, "name":"arsenal.jpg"},
    {"id":4, "name":"city.jpg"},
    {"id":5, "name":"liverpool.jpg"}
];

var res = photoList.map(function(p){
  if(p.name === photo.cover1 || p.name === photo.cover2)
   return p.id;
}).filter(x => x);

console.log(res);
1
Mamun 1 Мар 2018 в 13:42

Вы можете создать массив значений покрытия и фильтра photoList и получить только значение id объектов.

var photo = { cover1: "arsenal.jpg", cover2: "liverpool.jpg" },
    photoList = [{ id: 1, name: "chelsea.jpg" }, { id: 2, name: "mu.jpg" }, { id: 3, name: "arsenal.jpg" }, { id: 4, name: "city.jpg" }, { id: 5, name: "liverpool.jpg"}],
    covers = Object.values(photo),
    result = photoList
        .filter(({ name }) => covers.includes(name))
        .map(({ id }) => id);

console.log(result);
1
Nina Scholz 1 Мар 2018 в 13:41

Вы уменьшите метод более подробно http://underscorejs.org/#reduce. И использовать какой-то метод.

var photo = {"cover1":"arsenal.jpg", "cover2":"liverpool.jpg"};
var photoList = [{"id":1, "name":"chelsea.jpg"},{"id":2, "name":"mu.jpg"},{"id":3, "name":"arsenal.jpg"},{"id":4, "name":"city.jpg"},{"id":5, "name":"liverpool.jpg"}];

const result = photoList.reduce((r, {id, name}) => {
  const match = Object.values(photo).some(e => e == name)
  if(match) r.push(id);
  return r;
}, [])

console.log(result)
0
frostcs 1 Мар 2018 в 13:43

Вы можете использовать метод reduce и внутри проверить значения другого объекта, используя метод some.

var photo = {"cover1":"arsenal.jpg", "cover2":"liverpool.jpg"};
var photoList = [{"id":1, "name":"chelsea.jpg"},{"id":2, "name":"mu.jpg"},{"id":3, "name":"arsenal.jpg"},{"id":4, "name":"city.jpg"},{"id":5, "name":"liverpool.jpg"}];

const result = photoList.reduce((r, {id, name}) => {
  const match = Object.values(photo).some(e => e == name)
  if(match) r.push(id);
  return r;
}, [])

console.log(result)
1
Nenad Vracar 1 Мар 2018 в 13:40

Использовать фильтр из массива

var newarray = photoList.filter( (currentphoto) => {
    return currentphoto.name === photo.cover1 || currentphoto.name === photo.cover2;
})

Достаточно

0
Koop4 1 Мар 2018 в 13:39

Вы можете создать массив перед циклом, а затем из блока if вставить в него нужные значения.

Ваш код должен выглядеть так:

<script type="text/javascript">
var photo = {"cover1":"arsenal.jpg", "cover2":"liverpool.jpg"};
var photoList = [
    {"id":1, "name":"chelsea.jpg"},
    {"id":2, "name":"mu.jpg"},
    {"id":3, "name":"arsenal.jpg"},
    {"id":4, "name":"city.jpg"},
    {"id":5, "name":"liverpool.jpg"}
];

var result = [];
for (var i = 0; i < photoList.length; i++) { 
    if(photoList[i].name == photo.cover1 || photoList[i].name == photo.cover2) {
        console.log(photoList[i].id);
        result.push(photoList[i].id);
    }
}
// I want to store it in array like this = [3,5]
</script>
0
Larpee 1 Мар 2018 в 13:35