Estoy tratando de leer los data JSON para encontrar cuántas instancias aparece el value de cada trait_type para cada nth edition y enviar el valor a la tabla HTML como una cadena con el ID del valor trait_type. La función de filter actualmente devuelve 0 para cada valor.
var data = [ { edition: 1, attributes: [ { trait_type: "hair", value: "mullet" }, { trait_type: "hat", value: "cap" } ] } ]; var mullet = data.filter(function (d) { return d.value === "mullet"; }).length, cap = data.filter(function (d) { return d.value === "cap"; }).length; document.getElementById("mullet").innerText = mullet; document.getElementById("cap").innerText = cap; <dl> <dt>Hair?</dt> <dd id="mullet"></dd> <dt>Hat?</dt> <dd id="cap"></dd> </dl>Tendrá que filtrarlo más profundamente, actualmente solo está mirando la capa superior de datos, por lo que solo existe la clave de atributos y la clave de valor no existe en { edition: 1, attributes: []} Solo existe en la matriz de atributos dentro de sus datos Entonces, lo que debe hacer es ir una capa más profunda, en su función de filtro. Al igual que:
function filterDataFor(type) { const result= data.filter( ({ attributes })=> attributes .filter(({value})=> value === type) ) return result.length } let mullet = filterDataFor('mullet') let cap = filterDataFor('cap') document.getElementById("mullet").innerText = mullet; document.getElementById("cap").innerText = cap