Как преобразовать объект в 2d массив с помощью JavaScript - PullRequest
0 голосов
/ 07 мая 2019

У меня есть такой объект, как:

{
    "sample.JPG": {
        "id": "c9a29270",
        "filename": "sample.JPG"
    },
    "test.JPG": {
        "id": "c6a270",
        "filename": "test.JPG"
    },
    "sample1.JPG": {
        "id": "c70",
        "filename": "sample1.JPG"
    },
    "test2.JPG": {
        "id": "c6a",
        "filename": "test2.JPG"
    }
}

и хотите, чтобы оно было таким:

[["fakepath/sample.JPG", "c9a29270"], ["fakepath/test.JPG", "c6a270"]]

здесь поддельный путь означает только статический / жестко заданный путь
то, что я пробовал, было

Object.keys(myobj).map((key)=> {
    return myoby[key];
});

но результат соответствовал моим нуждам, какие-либо предложения?

Я сделал что-то вроде этого:

for(var i in obj){
    this.arr.push(['fakepath/' + i,obj[i].id])
}

это нормально?

Ответы [ 5 ]

3 голосов
/ 07 мая 2019

Вы можете map() более Object.values, что довольно лаконично и легче для чтения, чем цикл:

let o = {"sample.JPG": {"id": "c9a29270","filename": "sample.JPG"},"test.JPG": {"id": "c6a270","filename": "test.JPG"},"sample1.JPG": {"id": "c70","filename": "sample1.JPG"},"test2.JPG": {"id": "c6a","filename": "test2.JPG"}}

let arr = Object.values(o).map(({id, filename}) => ['fakepath/' + filename, id])
console.log(arr)
2 голосов
/ 07 мая 2019

Вы можете использовать Object.keys и map.

let obj = { "sample.JPG": { "id": "c9a29270", "filename": "sample.JPG" }, "test.JPG": { "id": "c6a270", "filename": "test.JPG" }, "sample1.JPG": { "id": "c70", "filename": "sample1.JPG" }, "test2.JPG": { "id": "c6a", "filename": "test2.JPG" } } 
console.log(Object.keys(obj).map(key=> [`fakepath/${key}`, obj[key].id]));
0 голосов
/ 07 мая 2019

Вы можете использовать Array.from с Object.values, используя функцию отображения для сопоставления каждого объекта в массив с путем и идентификатором:

const obj = {"sample.JPG": {"id": "c9a29270","filename": "sample.JPG"},"test.JPG": {"id": "c6a270","filename": "test.JPG"},"sample1.JPG": {"id": "c70","filename": "sample1.JPG"},"test2.JPG": {"id": "c6a","filename": "test2.JPG"}}

const res = Array.from(Object.values(obj), 
  ({id, filename}) => [`fakepath/${filename}`, id]);

console.log(res);
0 голосов
/ 07 мая 2019

Попробуйте это

const src = {
  "sample.JPG": {
    "id": "c9a29270",
    "filename": "sample.JPG"
  },
  "test.JPG": {
    "id": "c6a270",
    "filename": "test.JPG"
  },
  "sample1.JPG": {
    "id": "c70",
    "filename": "sample1.JPG"
  },
  "test2.JPG": {
    "id": "c6a",
    "filename": "test2.JPG"
  }
};

function objToAr(obj){
  let result = [];
   for(key in obj){
     let innerObj = obj[key];
     result.push([`fakepath/${innerObj.filename}`, innerObj.id]);
   }
  return result;
}

console.log(objToAr(src))
0 голосов
/ 07 мая 2019

Карта Object.entries объекта:

const input = {
  "sample.JPG": {
    "id": "c9a29270",
    "filename": "sample.JPG"
  },
  "test.JPG": {
    "id": "c6a270",
    "filename": "test.JPG"
  },
  "sample1.JPG": {
    "id": "c70",
    "filename": "sample1.JPG"
  },
  "test2.JPG": {
    "id": "c6a",
    "filename": "test2.JPG"
  }
};
const output = Object.entries(input)
  .map(([key, { id, filename }]) => ([`fakepath/${filename}`, id]))
console.log(output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...