subscribeArrayChanged with KnockoutJS

HTML

<script src="http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.1.0.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.3.5/knockout.mapping.js"></script>
<table>
    <tbody data-bind="foreach: dataOne">
        <tr>
            <td data-bind="text: id"></td>
            <td>&nbsp;</td>
            <td>
                <input type="checkbox" data-bind="checked: $root.duplicates.indexOf(name1) !== -1" />
            </td>
        </tr>
    </tbody>
</table>

CSS

.items {
    border-bottom: 1px solid blue;
}

JavaScript

var data1 = [{
    name1: "one",
    id: 1
}, {
    name1: "two",
    id: 2
}, {
    name1: "three",
    id: 3
}];
var data2 = [{
    name2: "five"
}, {
    name2: "two"
}, {
    name2: "three"
}];

var viewModel = {
    dataOne: ko.observableArray(data1),
    dataTwo: ko.observableArray(data2),
    duplicates: ko.observableArray()
};

viewModel.dataTwo.push({
    name: "four"
}); //add one on the end

var flattenedOne = ko.utils.arrayMap(viewModel.dataOne(), function (item) {
    //alert(item.name1);
    return item.name1;
});

var flattenedTwo = ko.utils.arrayMap(viewModel.dataTwo(), function (item) {
    //  alert(item.name2);
    return item.name2;
});

var differences = ko.utils.compareArrays(flattenedOne, flattenedTwo);
//return a flat list of differences
ko.utils.arrayForEach(differences, function (difference) {
    if (difference.status === 'retained') {
        viewModel.duplicates.push(difference.value);
    }
});

ko.applyBindings(viewModel);