javascript-objects - javascript array.from ie11 - オブジェクトの配列から、あるプロパティの値を配列として取り出す

javascript オブジェクト名 取得 / javascript

以下の構造を持つJavaScriptのオブジェクト配列があります。

objArray = [ { foo: 1, bar: 2}, { foo: 3, bar: 4}, { foo: 5, bar: 6} ];

このような些細な方法でできるのです。

function getFields(input, field) {
    var output = [];
    for (var i=0; i < input.length ; ++i)
        output.push(input[i][field]);
    return output;
}

var result = getFields(objArray, "foo"); // returns [ 1, 3, 5 ]

hyde



Answer #1
function getFields(list, field) {
    //提供されたリストを、要求されたフィールドのみを含む配列に縮小します
    return list.reduce(function(carry, item) {
        //アイテムが実際にオブジェクトであり、フィールドが含まれているかどうかを確認します
        if (typeof item === 'object' && field in item) {
            carry.push(item[field]);
        }

        // 'carry'(一致したフィールド値のリスト)を返します
        return carry;
    }, []);
}

アイテムがオブジェクトではない場合や、フィールドが含まれていない場合には、デフォルト値をネゴシエートすることで、より柔軟に対応することができます。

function getFields(list, field, otherwise) {
    //提供されたリストを、要求されたフィールドまたは代替値のいずれかを含む配列に縮小します
    return list.reduce(function(carry, item) {
        //アイテムがオブジェクトであり、フィールドが含まれている場合は、その値を追加し、そうでない場合は、そうでない場合はの値を追加します
        carry.push(typeof item === 'object' && field in item ? item[field] : otherwise);

        // 'carry'(一致したフィールド値のリスト)を返します
        return carry;
    }, []);
}
function getFields(list, field, otherwise) {
    //提供されたリストを、要求されたフィールドまたは代替値のいずれかを含む配列にマップします
    return list.map(function(item) {
        //アイテムがオブジェクトであり、フィールドが含まれている場合は、その値を追加し、そうでない場合は、そうでない場合はの値を追加します
        return typeof item === 'object' && field in item ? item[field] : otherwise;
    }, []);
}

そして、最も柔軟なソリューションは、代替の価値を提供するだけで、両方の行動を切り替えることができるものです。

function getFields(list, field, otherwise) {
    //「それ以外の場合」を使用するかどうかを1回決定します
    var alt = typeof otherwise !== 'undefined';

    //提供されたリストを、要求されたフィールドのみを含む配列に縮小します
    return list.reduce(function(carry, item) {
        //アイテムがオブジェクトであり、フィールドが含まれている場合は、その値と、提供されている場合は「それ以外の場合」の値を追加します
        if (typeof item === 'object' && field in item) {
            carry.push(item[field]);
        }
        else if (alt) {
            carry.push(otherwise);
        }

        // 'carry'(一致したフィールド値のリスト)を返します
        return carry;
    }, []);
}
function getFields(list, field, otherwise) {
    var alt = typeof otherwise !== 'undefined';

    return list.reduce(function(carry, item) {
        return carry.concat(typeof item === 'object' && field in item ? item[field] : (alt ? otherwise : []));
    }, []);
}